flutter - 如何在 FutureBuilder Future.wait 函数中缓存 Future,以便在每次状态更改时不重建

标签 flutter dart flutter-getx

我想使用多个 Future,因此我在 FutureBuilder 中实现了 Future.wait 功能。

但只要页面状态发生变化,它就会不断重建。如何在 Future.wait 中缓存 future?

这是代码:

GetBuilder<OrdersMainController>(builder: (controller) {
            return FutureBuilder(
                future: Future.wait([controller.ordersFuture.value]),// lets me use multiple futures
                builder: (context, snapshot) {
                  switch (snapshot.connectionState) {
                    case ConnectionState.active:
                    case ConnectionState.waiting:
                    case ConnectionState.done:
                      if (snapshot.hasError) {
                        return SizedBox(
                            width: double.infinity,
                            height: 600,
                            child: Center(
                                child: Text(snapshot.error.toString(),
                                    style:
                                        Theme.of(context).textTheme.caption!)));
                      }
                      controller.ordersData.value = (snapshot.data! as List)[0];
                      final DataTableSource _data =
                          OrdersMainSource(controller.ordersData.value.data!);
                      return ...
                    default:
                      return ...;
                  }
                });
          })

最佳答案

不要在每次构建时调用 Future.wait(),而是使用 StatefulWidget 并将计算缓存在其状态内(请注意,状态对象在重建后仍然存在)。

class _MyWidgetState extends State<MyWidget> {
late final lotsOfData=Future.wait([controller.ordersFuture.value])
 @override
  Widget build(BuildContext context) {
.....
 return FutureBuilder(
                future: lotsOfData,


通过将lotsOfData声明为State对象内部的后期最终变量,您实际上正在缓存它。通过延迟声明,您不会急于启动 future ,而是在第一次访问时启动 future 。

关于flutter - 如何在 FutureBuilder Future.wait 函数中缓存 Future,以便在每次状态更改时不重建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69174097/

相关文章:

flutter - Azure DevOps CI/CD 未安装最新的 flutter 版本

flutter - 在 Stream 上调用 Drain() 永远不会返回并且流永远不会关闭

android - 如何找出哪个 flutter 依赖项使用特定的 google 包(在 F-droid 上被列入黑名单)?

Flutter 和 GetxController - 如何管理状态不可靠性?

flutter - 使用 GetX 模式在 flutter 项目中每个模块拥有多个 View 是一个好习惯吗?

flutter - 如何使用 flutter getx 从 TextEditingController 获取并显示值

android - 为什么我的Flutter应用在IOS模拟器上看起来不错,但在Android上却溢出了?

dart - Dart .onMouseOver

flutter - 如何关闭屏幕键盘?

flutter - 为了缩短 Flutter/dart 中的复杂布局,处理将数据传递到小部件的最佳方法?