在 Flutter 中执行之前等待所有异步函数完成

加尔文

我正在为我的应用程序使用 Flutter。我需要从 Firebase 实时数据库中查询大量信息(例如 50 个不同的数据位置),因此我需要异步启动它们并等待它们全部返回,然后再更新 UI 以向用户显示信息。

我如何在 Flutter 中实现这一点?使用异步,等待,我只能等待 1 个异步函数。

青蒿

请查看Future.wait方法。使用 Future.wait() 您可以启动多个请求,然后等待所有请求完成。我还在下面给出了示例代码。

等待方法

Future<List<T>> wait <T>(

    Iterable<Future<T>> futures,
    {bool eagerError: false,
    void cleanUp(
        T successValue
    )}

)

等待多个期货完成并收集其结果。

返回一个期货,一旦所有提供的期货都完成,它就会完成,无论是结果还是错误,如果任何提供的期货失败。

返回的 future 的值将是按照迭代期货提供期货的顺序生成的所有值的列表。

如果任何未来以错误结束,则返回的未来以该错误结束。如果进一步的期货也完成了错误,则丢弃这些错误。

如果eagerError 为true,则返回的future 会在其中一个future 中的第一个错误处立即完成并出现错误。否则所有的期货必须在返回的期货完成之前完成(仍然有第一个错误;其余的错​​误被静默删除)。

在出现错误的情况下,cleanUp(如果提供)将在成功期货的任何非空结果上调用。这使得清理否则会丢失的资源成为可能(因为返回的未来不提供对这些值的访问)。如果没有错误,则不会使用 cleanUp 函数。

对 cleanUp 的调用不应抛出。如果是,则错误将是未捕获的异步错误。

请参见下面的示例代码,所有三个期货的结果同时加载到 ListView 中,因为 Future.wait 在返回结果之前等待所有期货完成:

import 'package:flutter/material.dart';

void main(List<String> args) {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  Future<List<String>> futureWait() async {
    return Future.wait([
      Future.delayed(const Duration(seconds: 1), () => "First Future Done"),
      Future.delayed(const Duration(seconds: 2), () => "Second Future Done"),
      Future.delayed(const Duration(seconds: 3), () => "Third Future Done"),
    ]);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text("Flutter Demo App"),
        ),
        body: FutureBuilder<List<String>>(
          future: futureWait(),
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              print(snapshot.data.length);
              return ListView.builder(
                itemCount: snapshot.data.length,
                itemBuilder: (context, index) => ListTile(
                  title: Text(snapshot.data[index]),
                ),
              );
            }
            return const Center(child: CircularProgressIndicator());
          },
        ),
      ),
    );
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Flutter中渲染小部件之前等待异步函数完成执行

如何在flutter中等待异步函数完成处理

Flutter Firebase setData()函数在异步函数完成之前将空值分配给字段

如何使Jest在期待断言之前等待所有异步代码完成执行

如何在flutter中完成所有以前的异步功能?

如何确保在所有异步函数完成后再次调用间隔函数?

等待所有异步方法完成

Flutter 的 invokeMethod 上有没有异步等待 C++ 数据的解决方案?

Nodejs 等待异步映射函数完成执行

在start方法停止之前,等待函数完成执行

如何让构建函数等待 Flutter 中的异步函数?

异步/等待在Flutter的登录页面中执行CircularProgressIndicator

异步等待不等待函数完成

如何进行循环等待所有异步功能完成。异步函数里面有多个异步函数

节点在执行代码之前等待所有异步调用

等待完成异步 lambda 表达式中的所有异步方法

如何等待所有异步完成?

如何使Parallel等待所有异步任务完成?

在加载数据之前完成所有异步请求?

Flutter等待Firestore完成

你如何等待所有异步调用在Java中完成?

在迭代之前等待函数完成运行

Flutter 如何在执行下一条指令之前完成异步 Future 任务

在Javascript中,async是否正在等待所有嵌套函数完成?

完成所有异步Http请求后执行功能

异步/等待/然后在Dart / Flutter中

等待异步递归函数完成,然后继续执行下一行代码

如何在执行下一个之前等待函数完成?

Javascript在执行下一行之前不等待STRIPE.COM函数完成