Future.wait()以内的期货可以按顺序调用吗?

我有两个期货正在进行适当的处理,Future.wait()FutureBuilder的一部分.

这些future 实际上是检索图像(相同的图像)的网络调用,第一个调用检索图像尺寸,第二个调用检索实际图像本身.

我希望确保这些future 调用实际上是按顺序执行的,这样一个调用就会发生在另一个调用之前.实际的顺序并不太重要.

我知道从Future.wait()的Angular 来看,顺序并不一定重要,因为它将"等待"两者都完成,但是这对我的应用程序很重要,因为第一个检索图像尺寸的调用实际上将缓存图像,因此第二个调用实际上不是网络调用,而是对缓存的调用.

如果它们同时发出,那么理论上会有两个我想要避免的网络调用

        FutureBuilder<List>(
          future:
          Future.wait([
            getImageDimensions(image)
            getImage(image)
          ]),
          builder: (ctx, snapshot) { ...

推荐答案

不是使用Future.wait,但您可以简单地创建一个按顺序等待两个函数调用并将它们收集到列表中的Future.

例如:

Future(() async => [
  await getImageDimensions(image),
  await getImage(image),
])

你可以用同样的方式把它传递给你的FutureBuilder人:

FutureBuilder<List>(
  future: Future(() async => [
    await getImageDimensions(image),
    await getImage(image),
  ]),
  builder: (ctx, snapshot) { ... },
)

Flutter相关问答推荐

如何在flutter文本字段中添加要点条目?

Flutter Go路由深度链接不按预期工作

build_runner显示错误没有为类ClassDeclaration定义getter宏关键字'

无法让Riverpod Stream发出新值

如何在Ffltter Chrome应用程序中使用webview_fltter_web显示自定义html而不是外部uri?

为什么Flutter 翼扩展卡有上下边框?

无效参数(S):隔离消息中的非法参数:try 旋转图像时对象不可发送

什么是dart :这只是dart ?

使用持久的侧边菜单和顶部栏在Ffltter Web应用程序中的页面之间导航

从future 列表到流列表Flutter Firebase

用户文档 ID 与 Firestore 中的用户 ID 相同

splash_screen 没有被推送到登录页面

Flutter Firebase 升级后出现问题? ARC 语义问题 (Xcode): Select 器appleCredentialWithIDToken:rawNonce:fullName:没有已知的类方法

如何制作flutter showDialog、AlertDialog屏障 colored颜色 渐变

Flutter/Dart - 从外部类更新状态

无效的 depfile: C:\xxx\xxx\Flutter\project_name\.dart_tool\flutter_build\df4b308df1ee4bce22c56c71751554d1\kernel_snapshot.d 无效

为什么这个参数类型不能分配给参数类型?

使用 hydrad_bloc 的预览包

Flutter Firebase 可以在真实设备上运行,而不是在 Android 模拟器上运行

Flutter GetX:Get.put 在 Widget 中的什么位置?