ListView 和快照 - 错误 - 错误状态:DocumentSnapshotPlatform 中不存在字段
ListView & Snapshot - error - Bad state: field does not exist within the DocumentSnapshotPlatform
快照和 ListView 有点问题。到目前为止,它工作得很好。但是由于我已经更新了 flutter 和 Dart,所以出现了错误。
The following StateError was thrown building StreamBuilder<QuerySnapshot<Object?>>(dirty, state: _StreamBuilderBaseState<QuerySnapshot<Object?>, AsyncSnapshot<QuerySnapshot<Object?>>>#8b4ae):
Bad state: field does not exist within the DocumentSnapshotPlatform
我不明白如何解决这个问题。我检查了文档中的字段名称,没有问题。
拜托,你能帮我理解这个吗?我们将不胜感激。谢谢
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class ProjectsList3 extends StatefulWidget {
ProjectsList3 ({Key key}) : super(key : key);
@override
_ProjectsList3State createState() => _ProjectsList3State();
}
class _ProjectsList3State extends State<ProjectsList3> {
@override
Widget build(BuildContext context) {
return Scaffold(
drawer: new MyMenu(),
appBar: new AppBar(
title: new Text('Projects'),
),
body: Column(
children: [
Expanded(
child: StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection('Users')
.doc(FirebaseAuth.instance.currentUser.uid)
.collection('projects')
.snapshots(),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if(snapshot.connectionState == ConnectionState.waiting){
return Center(child: LinearProgressIndicator());
}
else{
return new ListView(
children: snapshot.data.docs.map((prgSnapshot){
return Card(
child: ListTile(
leading: CircleAvatar(
),
title: Text(prgSnapshot['project_Name']),
)
) ;
}).toList(),
);
//if (!snapshot.hasData) {
// return Center(
// child: CircularProgressIndicator(),
// );
}
}
),
),
],
),
bottomNavigationBar: MyBottomAppBar(),
);
throw UnimplementedError();
}
}
首先,请尝试为
实现ListView
if(snapshot.hasData)
在此代码中:
return new ListView(
children: snapshot.data.docs.map((prgSnapshot){
return Card(
child: ListTile(
leading: CircleAvatar(
),
title: Text(prgSnapshot['project_Name']),
)
) ;
}).toList(),
);
snapshot.data
是 QuerySnapshot
, which means that prgSnapshot
is a DocumentSnapshot
。如果您查看该文档,您会发现它没有 []
访问器。
如果要从文档的数据中获取字段,请使用prgSnapshot.data()['project_Name']
或prgSnapshot.get('project_Name')
。
快照和 ListView 有点问题。到目前为止,它工作得很好。但是由于我已经更新了 flutter 和 Dart,所以出现了错误。
The following StateError was thrown building StreamBuilder<QuerySnapshot<Object?>>(dirty, state: _StreamBuilderBaseState<QuerySnapshot<Object?>, AsyncSnapshot<QuerySnapshot<Object?>>>#8b4ae): Bad state: field does not exist within the DocumentSnapshotPlatform
我不明白如何解决这个问题。我检查了文档中的字段名称,没有问题。 拜托,你能帮我理解这个吗?我们将不胜感激。谢谢
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class ProjectsList3 extends StatefulWidget {
ProjectsList3 ({Key key}) : super(key : key);
@override
_ProjectsList3State createState() => _ProjectsList3State();
}
class _ProjectsList3State extends State<ProjectsList3> {
@override
Widget build(BuildContext context) {
return Scaffold(
drawer: new MyMenu(),
appBar: new AppBar(
title: new Text('Projects'),
),
body: Column(
children: [
Expanded(
child: StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection('Users')
.doc(FirebaseAuth.instance.currentUser.uid)
.collection('projects')
.snapshots(),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if(snapshot.connectionState == ConnectionState.waiting){
return Center(child: LinearProgressIndicator());
}
else{
return new ListView(
children: snapshot.data.docs.map((prgSnapshot){
return Card(
child: ListTile(
leading: CircleAvatar(
),
title: Text(prgSnapshot['project_Name']),
)
) ;
}).toList(),
);
//if (!snapshot.hasData) {
// return Center(
// child: CircularProgressIndicator(),
// );
}
}
),
),
],
),
bottomNavigationBar: MyBottomAppBar(),
);
throw UnimplementedError();
}
}
首先,请尝试为
实现ListViewif(snapshot.hasData)
在此代码中:
return new ListView(
children: snapshot.data.docs.map((prgSnapshot){
return Card(
child: ListTile(
leading: CircleAvatar(
),
title: Text(prgSnapshot['project_Name']),
)
) ;
}).toList(),
);
snapshot.data
是 QuerySnapshot
, which means that prgSnapshot
is a DocumentSnapshot
。如果您查看该文档,您会发现它没有 []
访问器。
如果要从文档的数据中获取字段,请使用prgSnapshot.data()['project_Name']
或prgSnapshot.get('project_Name')
。