Flutter:FutureBuilder 内部的异步调用

Flutter: Async call inside FutureBuilder

我有一个异步调用,它为我提供了一个 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() 函数中打印的,但是因为它必须等待它。我只是不知道如何在异步调用中处理异步调用。

您需要多个 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(因此有多个请求)

但如果您只需要检索此用户一次: