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
相关产品推荐
相关产品推荐

