Firebase 类别';QueryDocumentSnapshot';没有实例方法';[]和#x27;。接收方:实例';QueryDocumentSnapshot';已尝试呼叫:[](“名称”)
我正试图从FireStore中检索这两个值 lastname“test”(字符串)name“Carlos”(字符串) 然而,我得到了这个错误Firebase 类别';QueryDocumentSnapshot';没有实例方法';[]和#x27;。接收方:实例';QueryDocumentSnapshot';已尝试呼叫:[](“名称”),firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我正试图从FireStore中检索这两个值 lastname“test”(字符串)name“Carlos”(字符串) 然而,我得到了这个错误 *引发了另一个异常:NoSuchMethodError:类“QueryDocumentSnapshot”没有实例方法“[]”。 ═ widgets库捕获到异常═ 在生成StreamBuilder时引发了以下NoSuchMethodError(脏,状态: _StreamBuilderBasState#e1fff): 类“QueryDocumentSnapsh
*引发了另一个异常:NoSuchMethodError:类“QueryDocumentSnapshot”没有实例方法“[]”。
═ widgets库捕获到异常═
在生成StreamBuilder时引发了以下NoSuchMethodError(脏,状态:
_StreamBuilderBasState#e1fff):
类“QueryDocumentSnapshot”没有实例方法“[]”。
接收器:“QueryDocumentSnapshot”的实例
尝试呼叫:[](“名称”)
这是我的密码:
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class HomePage extends StatelessWidget{
List<Widget> makeListWiget(AsyncSnapshot snapshot){
return snapshot.data.documents.map<Widget>((document){
return ListTile(
title: Text(document["name"]),
subtitle: Text(document["lastname"]),
);
}).toList();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Área do Cliente'),
),
body: Container(
child: StreamBuilder (
stream: FirebaseFirestore.instance.collection("users").snapshots(),
builder: (context, snapshot){
return ListView(
children: makeListWiget(snapshot),
);
}
)
)
);
}
}
导入“包装:颤振/材料.省道”;
导入“包:cloud_firestore/cloud_firestore.dart”;
类主页扩展了无状态小部件{
列表makeListWiget(异步快照快照){
返回snapshot.data.documents.map((文档){
返回列表块(
标题:文本(文件[“名称]),
副标题:文本(文档[“lastname]”),
);
}).toList();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“客户区”),
),
主体:容器(
孩子:StreamBuilder(
流:FirebaseFirestore.instance.collection(“用户”).snapshots(),
生成器:(上下文,快照){
返回列表视图(
子项:makeListWiget(快照),
);
}
)
)
);
}
}
您试图使用文档[“名称”]
访问的对象无效,因为该对象是实例QueryDocumentSnapshot,并且没有方法[]。但是,它支持get方法,以便进一步阅读。我对您的代码做了一些更改,下面是一个工作版本
如果尚未添加,请在pubspec.yaml中添加firebase\u core:^0.5.0
作为依赖项
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: Firebase.initializeApp(),
builder: (context, snapshot) {
final FirebaseFirestore _fireStore = FirebaseFirestore.instance;
return Scaffold(
appBar: AppBar(
title: Text('Área do Cliente'),
),
body: Container(
child: StreamBuilder(
stream: _fireStore
.collection("users")
.snapshots(),
builder: (context, snapshot) {
return ListView(
children: makeListWiget(snapshot),
);
})));
},
);
}
List<Widget> makeListWiget(AsyncSnapshot snapshot) {
return snapshot.data.documents.map<Widget>((document) {
return ListTile(
title: Text(document.get('name')),
subtitle: Text(document.get('lastname')),
);
}).toList();
}
}
import'包:firebase_core/firebase_core.dart';
进口“包装:颤振/材料.省道”;
导入“包:cloud_firestore/cloud_firestore.dart”;
类主页扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
回归未来建设者(
future:Firebase.initializeApp(),
生成器:(上下文,快照){
最终FirebaseFirestore _fireStore=FirebaseFirestore.instance;
返回脚手架(
appBar:appBar(
标题:文本(“客户区”),
),
主体:容器(
孩子:StreamBuilder(
流:_fireStore
.收集(“用户”)
.snapshots(),
生成器:(上下文,快照){
返回列表视图(
子项:makeListWiget(快照),
);
})));
},
);
}
列表makeListWiget(异步快照快照){
返回snapshot.data.documents.map((文档){
返回列表块(
标题:文本(document.get('name')),
字幕:文本(document.get('lastname'),
);
}).toList();
}
}
来自cloud\u firestore:^0.14.0+2版本,许多方法和字段已更改
Need to use get() method for accessing particular field of a doucment like this document.get('user_name') instead of document['user_name']
So you have to access all fields as follows:
document.get('user_name')
document.get('user_mobile')
document.get('user_address')
还有其他方法,如setData()作为set(),updateData()作为update()
请检查文件
Need to use get() method for accessing particular field of a doucment like this document.get('user_name') instead of document['user_name']
So you have to access all fields as follows:
document.get('user_name')
document.get('user_mobile')
document.get('user_address')