firebase - 我在 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(),
);
},
),
);
}
}
解决方案
DocumentSnapshot.data()
是一个方法而不是 getter,因此必须包含括号才能实际调用该方法并获取返回的Map
. 这就是当您尝试[]
在函数引用上使用运算符时,dart 会感到困惑并引发错误的原因。
将出现错误的行替换为以下内容:
title: Text(snapshot.data[index].data()['text']),
推荐阅读
- sql - 如何在不应用透视功能的情况下为不同字段创建列
- javascript - 使用 Underscore.js 过滤列
- javascript - html按钮在移动设备中不起作用
- spring-mvc - 多个 ContextLoader* 定义
- ruby - ActiveRecord 根据不存在的孩子找到父母
- reactjs - 是否可以使用 axios 的前端反应和球衣的后端 java 动态网络?
- javascript - 在 React-Native 中检测和处理慢速互联网连接
- docker - 詹金斯管道内的泊坞窗错误
- jquery - JQuery-Ajax 第二个函数在第一个函数之前执行
- sql - 如何在 SQL Server 的窗口函数中使用日期范围