Flutter - ListView 可以包含静态小部件和流吗

2024-04-06

目前我有一个由 StreamBuilder 扭曲的 ListView,它从 firebase firestore 获取数据(例如用户列表)。它看起来是这样的:

Widget UsersList = new StreamBuilder(
  stream: Firestore.instance
    .collection('users')
    .snapshots(),
  builder: (context, snapshot) {
    if (!snapshot.hasData) return const Text("loading");
    return new ListView.builder(
      itemCount: snapshot.data.documents.length,
      itemBuilder: (context, index) =>
        _buildItem(context, snapshot.data.documents[index]),
    );
  }
);

问题是如何向 ListView 的顶部添加一个静态小部件(例如创建新用户的按钮),我不希望该按钮始终保留在页面顶部,它应该随列表显示。

解决方法:在 _buildItem() 函数中,如果它是第一个文档(通过传递给函数 index==0),我可以收到一个布尔值,如果 true 则首先构建静态小部件(例如添加用户按钮)。但我能想到三个问题:

  1. 如果 firestore 集合中没有任何文档,它将不会渲染静态小部件。
  2. 如果互联网连接速度较慢,则在下载第一个文档之前不会呈现静态小部件。
  3. 这是一个解决方法...

你可以检查里面的长度ListView.builder并始终为按钮添加一个项目。

Widget UsersList = new StreamBuilder(
  stream: Firestore.instance.collection('users').snapshots(),
  builder: (context, snapshot) {
    return new ListView.builder(
      itemCount: (snapshot?.data?.documents?.length ?? 0) + 1,
      itemBuilder: (context, index) {
        if (index == 0)
          return FlatButton(child: Text("Add"));
        else
          _buildItem(context, snapshot.data.documents[index-1]);
      },
    );
  },
),
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter - ListView 可以包含静态小部件和流吗 的相关文章

随机推荐