【问题标题】:The argument type 'Stream<dynamic>?' can't be assigned to the parameter type 'Stream<QuerySnapshot>?'参数类型 'Stream<dynamic>?'不能分配给参数类型“Stream<QuerySnapshot>?”
【发布时间】:2023-03-13 20:08:01
【问题描述】:

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

getter 'documents' 没有为类型 'Object' 定义

谁能帮我解决这个问题?

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']);
      },
    );
  },
);

}

【问题讨论】:

  • StreamBuilder(...) 更改为StreamBuilder&lt;QuerySnapshot&gt;(...)

标签: firebase flutter dart google-cloud-firestore


【解决方案1】:

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

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

设置它需要一些额外的工作,但如果您在代码中包含更多调用,它肯定会很快得到回报。

【讨论】:

  • 是的,谢谢你这工作我做了chatMessageStream QuerySnapshot的返回类型。
猜你喜欢
  • 2021-09-26
  • 2021-12-30
  • 2021-10-28
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 2021-05-25
  • 1970-01-01
相关资源
最近更新 更多