Flutter:FutureBuilder 中的异步调用
Posted
技术标签:
【中文标题】Flutter:FutureBuilder 中的异步调用【英文标题】:Flutter: Async call inside FutureBuilder 【发布时间】:2021-07-18 01:26:28 【问题描述】:我有一个异步调用,它让我得到一个objects
的列表,我从中生成一个带有ListView.builder
的ListView。每个对象都有一个名为usedId
的属性,它是一个整数。
我正在尝试基于其id
获取user object
。
这是我的 FutureBuilder:
FutureBuilder<MyObjects>(
future: getMyObjects(),
builder: (context, snapshot)
if (snapshot.hasError) return Text('Error $snapshot.error');
if (snapshot.connectionState != ConnectionState.done) return Center(child: CircularProgressIndicator());
return ListView.builder(
itemCount: snapshot.data.content.length,
itemBuilder: (BuildContext context, int index)
// Get user by its id
User user;
Future<User> futureUser = QuestionRestApi.getStatistics(snapshot.data.userId);
futureUser.then((data)
print(user);
user = data;
);
return Text('Username: user.username');
)
);
我的用户被打印在 then() 函数中,但是因为它必须等待它。我只是不知道如何处理异步调用中的异步调用。
【问题讨论】:
【参考方案1】:您需要多个 FutureBuilder:
FutureBuilder<MyObjects>(
future: getMyObjects(),
builder: (context, snapshot)
if (snapshot.hasError) return Text('Error $snapshot.error');
if (snapshot.connectionState != ConnectionState.done) return Center(child: CircularProgressIndicator());
return ListView.builder(
itemCount: snapshot.data.content.length,
itemBuilder: (BuildContext context, int index)
return FutureBuilder<User>(
future: QuestionRestApi.getStatistics(snapshot.data.userId),
builder: (context, userSnapshot)
return Text('Username: $userSnapshot.data.username');
)
);
这将为每个列表项调用QuestionRestApi.getStatistics
(因此有多个请求)
但如果您只需要检索此用户一次: Can I use multiple method on a future builder?
【讨论】:
以上是关于Flutter:FutureBuilder 中的异步调用的主要内容,如果未能解决你的问题,请参考以下文章
使用 Flutter FutureBuilder 迭代 JSON 中的对象数组
在构建期间调用 setState() 或 markNeedsBuild(),使用 FutureBuilder 中的 Provider 和 Flutter 中的 StreamBuilder
FlutterFuture 与 FutureBuilder 异步编程代码示例 ( FutureBuilder 构造函数设置 | 处理 Flutter 中文乱码 | 完整代码示例 )
Flutter StreamBuilder 与 FutureBuilder
Flutter 在尝试使用 Dismissible ListView 删除 futurebuilder 中的项目时出现范围错误