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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:35:24