Flutter报错:QuerySnapshot类型未定义'documents' getter的解决咨询
解决Flutter中QuerySnapshot的'documents' getter未定义错误
这个错误是因为Firebase Firestore Flutter SDK版本更新后API发生了变更:旧版本的documents、documentID、data属性在新版本中已被替换。
具体修改点:
- 将
snapshot.data.documents替换为snapshot.data.docs - 将
f.documentID替换为f.id - 将
f.data替换为f.data()(注意这是方法调用,需要添加括号)
修改后的关键代码片段:
getExpenseItems(AsyncSnapshot<QuerySnapshot> snapshot) { List<ElementTask> listElement = [], listElement2; Map<String, List<ElementTask>> userMap = {}; List<String> cardColor = []; if (widget.user.uid.isNotEmpty) { cardColor.clear(); snapshot.data.docs.map<List>((f) { f.data().forEach((a, b) { if (b.runtimeType == bool) { listElement.add(ElementTask(a, b)); } if (b.runtimeType == String && a == "color") { cardColor.add(b); } }); listElement2 = List<ElementTask>.from(listElement); userMap[f.id] = listElement2; // 后续原有逻辑保持不变 for (int i = 0; i < listElement2.length; i++) { if (listElement2.elementAt(i).isDone == false) { userMap.remove(f.id); if (cardColor.isNotEmpty) { cardColor.removeLast(); } break; } } if (listElement2.length == 0) { userMap.remove(f.id); cardColor.removeLast(); } listElement.clear(); }).toList(); // 后续页面跳转逻辑保持不变 return List.generate(userMap.length, (int index) { return GestureDetector( onTap: () { Navigator.of(context).push( PageRouteBuilder( pageBuilder: (_, __, ___) => DetailPage( user: widget.user, i: index, currentList: userMap, color: cardColor.elementAt(index), ), transitionsBuilder: (context, animation, secondaryAnimation, child) => ScaleTransition( scale: Tween<double>( begin: 1.5, end: 1.0, ).animate( CurvedAnimation( parent: animation, curve: Interval( 0.50, 1.00, curve: Curves.linear, ), ), ), child: ScaleTransition( scale: Tween<double>( begin: 0.0, end: 1.0, ).animate( CurvedAnimation( parent: animation, curve: Interval( 0.00, 0.50, curve: Curves.linear, ), ), ), child: child, ), ), ), ); }, // 剩余组件代码保持不变
如果是从旧版本Firebase SDK升级而来,这类API变更是常规的兼容性调整,确保代码与当前依赖的SDK版本匹配即可。
内容的提问来源于stack exchange,提问作者Mat Koffman
相关产品推荐
相关产品推荐

