我有一个异步调用,它为我提供了一个 objects
列表,我从中生成了一个带有 ListView.builder
的 ListView。每个对象都有一个名为 usedId
的属性,它是一个整数。
我正在尝试根据其 user object
获取 id
。
这是我的 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() 函数内,但因为它必须等待它。我只是不知道如何在异步调用中处理异步调用。
答案 0 :(得分:3)
您需要多个 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?