More
如何在 Flutter 中使用 List.generate 进行数据处理(Data Handling),并与 Back4app 配合使用
10 分
介绍 在flutter中,动态列表创建的最简单方法是使用 list generate 它特别有助于处理通过后端服务(如back4app)获取的数据。无论是动态ui元素、处理多个数据条目,还是优化网络请求, list generate 至少可以简化你的代码并提升性能。 在本教程中,我们将看到如何有效地使用 list generate 处理后端数据。在这个例子中,你将看到如何创建一个简单的flutter应用程序,使用back4app动态获取和显示用户评论,并在此过程中进行评分。你将学习处理后端数据、网络请求优化和使用 list generate 先决条件 要完成本教程,你需要: 一个 back4app 账户。请在 back4app com https //www back4app com 注册一个免费账户。 在本地机器上设置 flutter 开发环境。如果您还没有设置,请遵循 flutter 安装指南 https //flutter dev/docs/get started/install 。 对 dart、flutter 小部件和异步编程的基本知识。 步骤 1 – 设置您的 back4app 后端 创建一个 back4app 项目 登录到您的 back4app 账户 https //dashboard back4app com/ 并创建一个新项目。 创建一个 parse 类 在您的 back4app 项目中,创建一个名为 review 的新 parse 类。此类将存储不同项目(例如,产品、电影等)的用户评论。添加以下字段: username (字符串):提交评论的用户的名称。 rating (数字):用户给出的评分,通常在 1 到 5 之间。 comment (字符串):评论文本或评论。 添加示例数据 用示例数据填充 review 类,以便在您的 flutter 应用中使用。 获取您的 back4app 凭据 导航到您的项目设置以检索您的应用程序 id 和客户端密钥,您需要这些信息将您的 flutter 应用连接到 back4app。 步骤 2 – 设置您的 flutter 项目 创建一个新的 flutter 项目 打开你的终端或命令提示符并运行 添加依赖项 打开 pubspec yaml 并添加以下依赖项 在你的应用中初始化 parse 在 lib/main dart , 导入 parse sdk 并在 main 函数中初始化它 import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk flutter dart'; void main() async { widgetsflutterbinding ensureinitialized(); 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()); } class myapp extends statelesswidget { @override widget build(buildcontext context) { return materialapp( home reviewscreen(), ); } } 将 'your back4app app id' 和 'your back4app client key' 替换为你的实际 back4app 凭据。 步骤 3 – 使用 list generate 获取和显示数据 创建 reviewscreen 小部件 在 lib/main dart , 添加一个新小部件,该小部件将从 back4app 获取评论并使用 list generate class reviewscreen extends statefulwidget { @override reviewscreenstate createstate() => reviewscreenstate(); } class reviewscreenstate extends state\<reviewscreen> { list\<parseobject>? reviews; @override void initstate() { super initstate(); fetchreviews(); } future\<void> fetchreviews() async { final query = querybuilder\<parseobject>(parseobject('review')); final response = await query query(); if (response success && response results != null) { setstate(() { reviews = response results as list\<parseobject>; }); } } @override widget build(buildcontext context) { return scaffold( appbar appbar(title text('user reviews')), body reviews == null ? center(child circularprogressindicator()) listview\ builder( itemcount reviews! length, itembuilder (context, index) { final review = reviews!\[index]; return reviewtile( username review\ get\<string>('username') ?? 'anonymous', rating review\ get\<int>('rating') ?? 0, comment review\ get\<string>('comment') ?? '', ); }, ), ); } } class reviewtile extends statelesswidget { final string username; final int rating; final string comment; reviewtile({required this username, required this rating, required this comment}); @override widget build(buildcontext context) { return card( margin edgeinsets symmetric(vertical 10, horizontal 15), child padding( padding const edgeinsets all(15 0), child column( crossaxisalignment crossaxisalignment start, children \[ text( username, style textstyle(fontweight fontweight bold), ), sizedbox(height 5), row( children list generate(5, (index) { return icon( index < rating ? icons star icons star border, color colors amber, ); }), ), sizedbox(height 10), text(comment), ], ), ), ); } } 在这个例子中, reviewtile 是一个自定义小部件,用于显示用户的评论。星级评分是使用 list generate 动态生成的,基于从后端检索的 rating 值创建一行星星图标。 步骤 4 – 使用 list generate 和 future wait 优化数据获取 在需要同时从多个后端端点获取数据的情况下,您可以使用 list generate 结合 future wait 来优化这个过程。 获取多个相关记录 想象一下您有另一个名为 product 的类,并且您想一次性获取多个产品的相关评论。您可以使用 list generate 来并发发起这些请求: future\<void> fetchmultipleproductsreviews(list\<string> productids) async { list\<future\<list\<parseobject>>> requests = list generate(productids length, (index) { final query = querybuilder\<parseobject>(parseobject('review')) whereequalto('productid', productids\[index]); return query query() then((response) => response results as list\<parseobject>); }); list\<list\<parseobject>> allreviews = await future wait(requests); setstate(() { allproductreviews = allreviews; }); } 这种方法通过同时获取所有产品的数据来减少整体等待时间。 步骤 5 – 使用 list generate 执行批量操作 如果您需要对从后端获取的多个记录执行批量更新或删除, list generate 可以简化这个过程。 批量更新示例 这是您可能一次性更新多个记录状态的方式: future\<void> updatemultiplereviews(list\<string> reviewids, string newstatus) async { list\<future\<parseobject>> updaterequests = list generate(reviewids length, (index) { parseobject review = parseobject('review') objectid = reviewids\[index]; review\ set('status', newstatus); return review\ save(); }); await future wait(updaterequests); print('all reviews updated'); } 使用 list generate 可以让你在单个操作中高效地对大量记录执行操作。 第6步 – 测试和运行你的应用 使用 flutter run 运行你的应用。 你应该能看到用户评论的列表,每条评论都显示使用 list generate 动态生成的星级评分。如果你实现了批量操作和多获取示例,也要测试这些场景,以确保一切正常工作。 结论 在本教程中,你学习了如何在flutter中使用 list generate 来高效处理和显示从后端(如back4app)获取的数据。通过使用 list generate , 你可以创建动态ui元素,优化数据获取,并以清晰和可维护的方式执行批量操作。这种方法不仅提高了应用的性能,还使你的代码库保持有序,易于管理。 有关在flutter中使用back4app的更多信息,请查看 back4app flutter文档 https //www back4app com/docs/flutter/overview 。祝编码愉快!