5

嗨,我是颤振和异步编程的新手。我需要做这样的事情:

List<Widget> usersProfiles = [];
      getUsers('DcofOiHWcjbjD0i18miW').then((user) {
        user.forEach((u) {
          usersProfiles.add(new ListTile(
            leading: CircleAvatar(
              backgroundImage: AssetImage(u.profilePicture),
            ),
            trailing: u.icon,
            title: new Text(u.name),
            onTap: () {
              Navigator.push(context,
                  new MaterialPageRoute(builder: (context) => new Home()));
            },
          ));
        });
      });

usersProfiles返回null

我会很感激的

4

2 回答 2

17

我会推荐FutureBuilderStreamBuilder(用于流),它可以为您提供布局性能优势以及轻松添加加载和错误小部件的工具。它可能如下所示:

Future<List<User>> usersFuture = getUsers('DcofOiHWcjbjD0i18miW');

将未来创建为成员变量,以便您只获取一次(以防该方法在每次调用它时都会启动一个新的未来)。然后在 FutureBuilder 中使用它。

FutureBuilder<List<User>>(
    future: usersFuture,
    builder: (context, snapshot) {
      if(snapshot.connectionState != ConnectionState.done) {
        // return: show loading widget
      }
      if(snapshot.hasError) {
        // return: show error widget
      }
      List<User> users = snapshot.data ?? [];
      return ListView.builder(
        itemCount: users.length,
        itemBuilder: (context, index) {
          User user = users[index];
          return new ListTile(
            leading: CircleAvatar(
              backgroundImage: AssetImage(user.profilePicture),
            ),
            trailing: user.icon,
            title: new Text(user.name),
            onTap: () {
              Navigator.push(context,
                  new MaterialPageRoute(builder: (context) => new Home()));
            },
          );
      });
  });
于 2019-03-06T04:17:03.017 回答
-2
Future<Solution> JuniorDeveloperQuestion {
// use Expansion List with Dynamic Data
return _2021.Solution.ExpansionListWithDynamicData; 
}

https://dev.to/rrtutors/dynamic-expansiontile-create-expansion-list-with-dynamic-data-2hl3

于 2021-03-31T06:44:34.033 回答