繁体   English   中英

如何在没有 FutureBuilder 的情况下监听一堆 Futures?

How to listen for a bunch of Futures without a FutureBuilder?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我已经构建了一个 FutureBuilder 来检查 Futures 然后基于它进行重定向,但由于它是一个 FutureBuilder,我必须将 Screen NOT ROUTING 返回给它们 有人可以分享一个示例,说明如何在没有 FutureBuilder 的情况下监听一堆期货,这样我就可以使用 animation 路由而不是虚拟返回。

FutureBuilder(
    future: Future.wait([
         firstFuture(),
         secondFuture(),
    ]),
    builder: (
       context, 
       AsyncSnapshot<List<bool>> snapshot, 
    ){

       if (!snapshot.hasData) { 
          return CircularProgressIndicator();
       }

       // If all future passed return home.
       if (snapshot.data[0] && snapshot.data[1]) 
          // Instead I want: MaterialPageRoute(builder: (_) => HomeScreen());
          return HomeScreen();

       // Instead I want: MaterialPageRoute(builder: (_) => permissionsScreen());
       return permissionsScreen();

    }
);

1 个回复

根据 pskink 的建议,我实现了这段代码,它将循环并等待一堆 Futures 完成,然后在没有 FutureBuilder 的情况下路由或其他任何东西:

//.. inside a StatfulWidget or whatever...

// Loop thru Dependencies List(Futures) and make sure all are loaded(finished).
Future<bool> loadDependencies(List<Future<bool>> dependenciesList) async {
    bool isAllDone = true;

    // Load dependencies.
    for (Future<bool> dependency in dependenciesList) {
      bool currentDep = await dependency;
      isAllDone = isAllDone && currentDep;
      if (!isAllDone) return false; // Break if any failed.
    }

    return isAllDone;
}

然后调用它,这是一个例子:

//.. inside a StatfulWidget

// Define App's Dependencies List.
final List<Future<bool>> dependenciesList = [
    someBloc.fetchData(),
];

@override
void initState() {
  super.initState();
  // Load dependencies then route once done.
  loadDependenciesAndRoute();
}

void loadDependenciesAndRoute() async {
    bool loadingStatus = await loadDependencies(dependenciesList);

    if (loadingStatus) {
      // As Context is not ready inside initState, routing using navigatorKey.
      await AppKeys.navigatorKey.currentState.push(
        Routes.home(),
      );
    } else {
      await AppKeys.navigatorKey.currentState.push(
          Routes.onLoading(),
      );
    }
}
1 如何在不嵌套一堆缩进的情况下打开一堆文件(使用上下文管理)

我有一些一次性使用的代码,从一个函数中提取,删除成千上万的目录及其内容。 这很好,但我想知道我是否可以在一堆文件中使用“with open()as”而不缩进和缩进和缩进... 这个问题确实涉及与python相同的主题:在几个上下文管理器上创建一个“with”块 。 这两者应该联系在 ...

6 如何在没有进程锁定的情况下立即处理一堆文件

我下面有一段代码,每30秒运行一次。 通过C#计时器, 有时在sourcePath路径中,我有大量文件,并且看起来在30秒内还没有完成,并且其他计时器启动了。 因此,我经常收到文件使用错误, 该进程无法访问文件'D:\\ path \\ file1.Zip',因为它正在被另 ...

2019-07-22 04:35:52 1 43   c#
7 如何在不让我的电脑死机的情况下加载一堆图像进行深度学习

我有一堆 tiff 图像,我的目标是将这些图像加载到一个 numpy 数组中,以便在 python 3 的 keras 模型中使用它。问题是当我将图像转换为数组时,我的计算机死机了。 我首先尝试将图像转换为数组并以 HDF5 格式保存所有内容,现在我尝试仅保存 1000 个图像,然后使用 gc.co ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM