Flutter项目从Firebase获取数据时闭包参数不匹配错误如何解决
错误原因
你使用的cloud_firestore2.0+版本中,QueryDocumentSnapshot的data从属性改为了方法,需要调用data()才能返回Map<String, dynamic>类型的文档数据,你直接用message.data['text']相当于尝试对函数本身做下标访问,所以触发参数不匹配的报错。
修复步骤
修改StreamBuilder的builder逻辑里获取字段的两行代码:
原错误代码:
final messageText = message.data['text']; final messageSender = message.data['Sender'];
修改为:
final messageData = message.data() as Map<String, dynamic>; final messageText = messageData['text']; final messageSender = messageData['Sender'];
额外优化建议
- 可以给
StreamBuilder指定泛型,避免隐式类型转换的风险:StreamBuilder<QuerySnapshot>(...) - 建议恢复你注释掉的加载状态逻辑,无数据时展示加载指示器,优化用户体验
- 可以给消息列表加滚动支持,把返回的
Column换成ListView,避免消息过多时溢出报错,还可以配置reverse: true让最新消息显示在底部,符合聊天软件使用习惯:
return ListView( reverse: true, children: messageWidgets, );
内容的提问来源于stack exchange,提问作者Karthik KK
相关产品推荐
相关产品推荐

