More
如何在Flutter中使用Future.wait和Back4app优化异步操作
7 分
介绍 异步编程在现代应用开发中至关重要,尤其是在处理从多个来源获取数据或执行多个网络请求等任务时。然而,高效地处理多个异步调用可能会很具挑战性。在flutter中, future wait 方法提供了一种强大的方式来管理多个 futures , 允许您的应用同时高效地等待多个异步操作。 在本教程中,您将学习如何在flutter中使用 future wait 来优化您的应用在处理多个异步任务时的性能。我们将把这项技术与back4app集成,您可以从后端执行并发数据获取,存储结果,并显著减少用户的等待时间。 先决条件 要完成本教程,您需要: 一个back4app账户。请在 back4app com https //www back4app com 注册一个免费账户。 在您的本地机器上设置flutter开发环境。如果您还没有设置,请遵循 flutter安装指南 https //flutter dev/docs/get started/install 。 对flutter中的异步编程有基本了解,并知道如何使用back4app作为后端服务。如果您是back4app的新手,请查看 back4app入门指南 https //www back4app com/docs/get started/welcome 。 步骤 1 – 设置您的 back4app 后端 创建一个 back4app 项目 登录到您的 back4app 账户 https //dashboard back4app com/ 并创建一个新项目。 创建 parse 类 在您的 back4app 项目中,创建两个新的 parse 类,命名为 任务 和 项目 “ 任务 ”类应具有字段 名称 (字符串) 和 已完成 (布尔值)。 “ 项目 ”类应具有字段 标题 (字符串) 和 描述 (字符串)。 添加示例数据 用示例数据填充这些类,我们将在 flutter 应用中使用 future wait 同时获取这些数据。 获取您的 back4app 凭据 导航到您的项目设置以检索您的应用程序 id 和客户端密钥,您需要这些信息将 flutter 应用连接到 back4app。 步骤 2 – 设置您的 flutter 项目 创建一个新的 flutter 项目 打开您的终端或命令提示符并运行 添加依赖项 打开 pubspec yaml 并添加以下依赖项 在您的应用中初始化 parse 在 lib/main dart , 导入 parse sdk 并在 main 函数中初始化它 const keyapplicationid = 'your back4app app id'; const keyclientkey = 'your back4app client key'; const keyparseserverurl = 'https //parseapi back4app com'; await parse() initialize(keyapplicationid, keyparseserverurl, clientkey keyclientkey, autosendsessionid true); runapp(myapp()); 替换 'your back4app app id' 和 'your back4app client key' 为您的实际 back4app 凭据。 步骤 3 – 使用 future wait 同时获取数据 创建 taskprojectscreen 小部件 在 lib/main dart , 添加一个新小部件,该小部件将同时从 task 和 project 类中获取数据: class taskprojectscreen extends statefulwidget { @override taskprojectscreenstate createstate() => taskprojectscreenstate(); } class taskprojectscreenstate extends state\<taskprojectscreen> { list\<parseobject>? tasks; list\<parseobject>? projects; string? errormessage; @override void initstate() { super initstate(); fetchdata(); } future\<void> fetchdata() async { try { // fetch tasks and projects concurrently final futures = \[ gettasks(), getprojects(), ]; final results = await future wait(futures); setstate(() { tasks = results\[0] as list\<parseobject>; projects = results\[1] as list\<parseobject>; }); } catch (e) { setstate(() { errormessage = e tostring(); }); } } future\<list\<parseobject>> gettasks() async { final query = querybuilder\<parseobject>(parseobject('task')); final response = await query query(); if (response success && response results != null) { return response results as list\<parseobject>; } else { throw exception('failed to load tasks'); } } future\<list\<parseobject>> getprojects() async { final query = querybuilder\<parseobject>(parseobject('project')); final response = await query query(); if (response success && response results != null) { return response results as list\<parseobject>; } else { throw exception('failed to load projects'); } } @override widget build(buildcontext context) { if (errormessage != null) { return center(child text('error $errormessage')); } if (tasks == null || projects == null) { return center(child circularprogressindicator()); } return listview( children \[ listtile(title text('tasks')), tasks! map((task) => listtile( title text(task get\<string>('name') ?? 'no name'), subtitle text('completed ${task get\<bool>('completed') ? 'yes' 'no'}'), )), listtile(title text('projects')), projects! map((project) => listtile( title text(project get\<string>('title') ?? 'no title'), subtitle text(project get\<string>('description') ?? 'no description'), )), ], ); } } 这个小部件使用 future wait 同时获取任务和项目,从而通过同时处理两个请求来减少总等待时间。 步骤 4 – 测试和运行您的应用 使用 flutter run 运行您的应用。 您应该在屏幕上看到显示的任务和项目列表。两个数据集是并发获取的,使数据检索过程更快、更高效。 结论 在本教程中,您学习了如何使用 future wait 来优化 flutter 应用中的异步操作。通过并发从多个来源获取数据并与 back4app 集成,您使您的应用更具响应性,并减少了用户的整体等待时间。 将 future wait 与像 back4app 这样的强大后端结合使用,可以有效管理多个异步任务并提高 flutter 应用的性能。有关如何将 back4app 与 flutter 一起使用的更多详细信息,请查看 back4app flutter 文档 https //www back4app com/docs/flutter/overview 。祝您编码愉快!