首页 > 解决方案 > 参数类型'流?不能分配给参数类型'Stream

问题描述

我正在尝试使用 StreamBuilder 显示来自 firestore 数据库的文本消息流。但是由于某种原因,不能将 Stream 的参数类型分配给Querysnapshot. 如果我摆脱Querysnapshot流构建器不再显示错误,但随后我收到错误:

没有为“对象”类型定义吸气剂“文档”

谁能帮我解决这个问题?

Widget ChatMessageList() {
return StreamBuilder(
  stream: chatMessagesStream,
  builder: (context, snapshot) {
    return ListView.builder(
      itemCount: snapshot.data!.documents.length,
      itemBuilder: (context, index) {
        return MessageTile(snapshot.data!.documents[index].data['message']);
      },
    );
  },
);

}

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


出现这种消息是因为 dart 不知道对象snapshot.data是什么类型。您可能需要指定将从您的流中返回的预期类型。chatMessagesStream 返回什么?如果是Stream<Bar>,那么就写吧(context, AsyncSnapshot<Bar> snapshot),就像官方例子中的StreamBuilder

此外,您不应该直接从您的小部件调用 firebase。这将创建大量的复制粘贴和混乱的代码。您可以在此处找到更简洁架构的示例: real-time-updates-with-streambuilder

设置它会做一些额外的工作,但当你在代码中包含更多调用时,它肯定会很快得到回报。


推荐阅读