【问题标题】:Correct use of Streams with Flutter-ListviewFlutter-Listview 正确使用 Streams
【发布时间】:2021-02-08 02:27:06
【问题描述】:

我正在尝试在flutterfirebase-firestore 中显示实时聊天屏幕(等于whatsapp 的主屏幕)。

工作:创建所有联系人“同行”的列表。看看我的列表视图:

Container(
  child: StreamBuilder(
    stream:
        //FirebaseFirestore.instance.collection('users').snapshots(),
        FirebaseFirestore.instance
            .collection('users')
            .doc(currentUserId)
            .collection('peers')
            .snapshots(),
    builder: (context, snapshot) {
      if (!snapshot.hasData) {
        return Center(
          child: CircularProgressIndicator(
            valueColor: AlwaysStoppedAnimation<Color>(themeColor),
          ),
        );
      } else {
        return ListView.builder(
          padding: EdgeInsets.all(10.0),
          itemBuilder: (context, index) =>
              buildItem(context, snapshot.data.documents[index]),
          itemCount: snapshot.data.documents.length,
        );
      }
    },
  ),
),

不工作:为每个图块加载特定数据,例如 last messagename。在创建我的第一个列表时我无法查询这个(第一个查询返回 peer-id,第二个返回 peer-id 的用户数据)。我的 buildItem 方法包含另一个流构建器,但是,一旦第一个流构建器进行更改,应用程序就会冻结。

  Widget buildItem(BuildContext context, DocumentSnapshot document) {
      return StreamBuilder<DocumentSnapshot>(
        stream: FirebaseFirestore.instance
            .collection('users')
            .doc(document.data()['peerId'])
            .snapshots(),
        builder: ...

这是嵌套流的正确方法吗?简单的列表视图记录得很好,但我在谷歌上找不到一个很好的例子。任何帮助表示赞赏。

【问题讨论】:

    标签: firebase flutter flutter-listview


    【解决方案1】:

    尝试在 initState 中只创建一次流并将其传递给此方法:

    //in initState
    peersStream = FirebaseFirestore.instance
                .collection('users')
                .doc(currentUserId)
                .collection('peers')
                .snapshots(),
    

    然后在StreamBuilder 中使用stream: peersStream

    另外,建议使用小部件类而不是小部件的方法:https://stackoverflow.com/a/53234826/5066615

    【讨论】:

      猜你喜欢
      • 2018-08-28
      • 1970-01-01
      • 2021-04-05
      • 2019-11-21
      • 2020-01-28
      • 2021-05-31
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多