Flutter StreamBuilder调用Firestore数据报错:运算符'[]'未定义于Object类型
解决Firestore中"The operator '[]' isn't defined for the type 'Object'"错误
这个错误是因为新版Firebase Firestore的DocumentSnapshot.data()方法返回类型为Object?,无法直接用[]操作符访问字段。给你三种可行的解决办法:
方法一:强制类型转换
直接把document.data()转换成Map<String, dynamic>类型,就能正常用[]取值:
Text("Amount Owned: ${(document.data()! as Map<String, dynamic>)['Amount']}"),
方法二:使用get方法(推荐,更安全)
Firestore的DocumentSnapshot自带get方法,可直接获取指定字段,无需强转:
Text("Amount Owned: ${document.get('Amount')}"),
方法三:指定泛型类型
在StreamBuilder和snapshots()中指定泛型为Map<String, dynamic>,让编译器明确数据类型,修改后的完整代码如下:
StreamBuilder<QuerySnapshot<Map<String, dynamic>>>( stream: FirebaseFirestore.instance .collection('Users') .doc(FirebaseAuth.instance.currentUser?.uid) .collection('Coins') .snapshots<Map<String, dynamic>>(), builder: (BuildContext context, AsyncSnapshot<QuerySnapshot<Map<String, dynamic>>> snapshot) { if (!snapshot.hasData) { return Center( child: CircularProgressIndicator(), ); } return ListView( children: snapshot.data!.docs.map((document) { return Container( child: Row( children: [ Text("Coin type: ${document.id}"), Text("Amount Owned: ${document.data()!['Amount']}"), ], ), ); }).toList(), ); }),
内容的提问来源于stack exchange,提问作者Chinmay
相关产品推荐
相关产品推荐

