【问题标题】:return a list from a future in flutter在颤动中从未来返回一个列表
【发布时间】:2019-07-27 09:48:10
【问题描述】:

您好,我是 Flutter 和异步编程的新手。我需要做这样的事情:

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

我会很高兴的

【问题讨论】:

    标签: android asynchronous dart flutter


    【解决方案1】:

    我会推荐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()));
                },
              );
          });
      });
    

    【讨论】:

    • 如何获取点击项的数据?我知道,实际上它可以使用索引来完成。但我不能使用 FutureBuilder 中的索引。提前致谢。
    【解决方案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

    【讨论】:

      猜你喜欢
      • 2022-06-21
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 2019-09-03
      • 2019-11-11
      • 2021-01-24
      • 2020-07-25
      相关资源
      最近更新 更多