You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter开发待办应用时StreamBuilder出现两处Firebase相关报错求解

Flutter待办应用StreamBuilder报错修复方案

错误原因说明

你的代码共有三处可合并为两点的语法/类型不匹配问题:

  • DatabaseService类的getTodos()方法未指定明确的返回类型,返回的Stream<dynamic>和StreamBuilder要求的Stream<DocumentSnapshot>类型不匹配
  • 空安全规则下snapshot.data可能为null,且新版Cloud Firestore SDK中获取文档数据需调用data()方法而非直接访问data属性,返回结果还需要强转为Map<String, dynamic>类型

修复步骤

1. 修改DatabaseService类的getTodos方法

找到你DatabaseService中的getTodos实现:

// 旧代码
Stream getTodos() {
  return userTodos.doc(userID).snapshots();
}

替换为:

// 新代码
Stream<DocumentSnapshot> getTodos() {
  return userTodos.doc(userID).snapshots();
}

2. 修改StreamBuilder中的数据读取逻辑

找到你标红的snapshot.data.data行:

// 旧代码
Map<String, dynamic> items = snapshot.data.data;

替换为:

// 新代码
Map<String, dynamic> items = snapshot.data!.data() as Map<String, dynamic>;

修改说明:

  • 加!表示你确认此处snapshot.data一定不为空(前面已做hasData判断,不会出现空值)
  • 将.data改为.data():符合新版Firestore SDK的调用规则,data是方法而非属性
  • 末尾加as Map<String, dynamic>将返回的通用对象强转为你需要的Map类型
    修改完成后重新运行即可解决所有报错。

内容的提问来源于stack exchange,提问作者Lars

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:51:02