首页 > 解决方案 > 我在 Flutter 应用程序中不断收到关于 Firestore 的 NoSuchMethodError 调用

问题描述

我被困在这个问题上。我一直在尝试渲染我的 Firestore 集合中的项目。每次我尝试检索它时,我都会收到此错误:

"Closure call with mismatched arguments: function '[]'
Receiver: Closure: () => Map<String, dynamic> from Function 'data':.
Tried calling: []("title")
Found: []() => Map<String, dynamic>"

我试图在网上寻找解决方案,但我觉得我应该做的事情有点卡住了。我已经评论了导致 ListTile 错误的部分。这是我过去几天一直坚持的事情。我安装了所有依赖项,例如 Firestore,所以我认为这不是依赖项问题。尽管我会非常感谢任何能够帮助我的人。

import 'package:flutter/material.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:tanbo_mobile/errorpage.dart';
import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';

class HomeTab extends StatefulWidget {
  @override
  _HomeTabState createState() => _HomeTabState();
}

class _HomeTabState extends State<HomeTab> {
  

Future getPosts() async {

   var firestoreReference = FirebaseFirestore.instance;

   QuerySnapshot qn = await firestoreReference.collection('posts').get();

   return qn.docs;

}

 @override
  Widget build(BuildContext context) {
return Container(
  child:
  FutureBuilder(
    future: getPosts(),
    builder: (_, snapshot) {

      if (snapshot.connectionState == ConnectionState.waiting) {

        return Center(
          child: CircularProgressIndicator(),
        );

      } else if (snapshot.connectionState == ConnectionState.done) {

        return ListView.builder(
          // The length of our data we will return
          itemCount: snapshot.data.length,
            itemBuilder: (_, index) {
              return ListTile(
                // This line is causing the errors!
                title: Text(snapshot.data[index].data['text']),
              );
            }
        );

      }

      return Center(
        child: CircularProgressIndicator(),
      );

    },
  ),
 );
  

  }

}

应用程序中的错误图像

Firestore 数据结构

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


DocumentSnapshot.data()是一个方法而不是 getter,因此必须包含括号才能实际调用该方法并获取返回的Map. 这就是当您尝试[]在函数引用上使用运算符时,dart 会感到困惑并引发错误的原因。

将出现错误的行替换为以下内容:

title: Text(snapshot.data[index].data()['text']),

推荐阅读