流和 firebase 状态不佳的问题:DocumentSnapshotPlatform 中不存在字段
Posted
技术标签:
【中文标题】流和 firebase 状态不佳的问题:DocumentSnapshotPlatform 中不存在字段【英文标题】:Problem with stream and firebase Bad state: field does not exist within the DocumentSnapshotPlatform 【发布时间】:2021-10-26 23:18:18 【问题描述】:我有一个 StreamBuilder,它旨在根据正在传递的变量从 firestore 中获取文档列表,尽管我遇到了上述错误。
流生成器
StreamBuilder<QuerySnapshot>(
stream: DatabaseService.getFeedPosts(widget.currentUserId),
builder: (context, snapshot)
if (snapshot.hasError) print(snapshot.error);
if (snapshot.connectionState == ConnectionState.waiting)
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
CircularProgressIndicator(),
// Loader Animation Widget
Padding(padding: const EdgeInsets.only(top: 20.0)),
Text('Finding tasks'),
],
),
);
if (snapshot.hasData)
final documents = snapshot.data.docs;
return ListView(
children: documents
.map(
(doc) => TaskList(
currentUserId: widget.currentUserId,
task: doc['id'],
user: doc['ownerId'],
),
)
.toList());
else if (snapshot.hasError)
print('Error');
return Text('It\'s Error!');
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Unable to find any tasks'),
],
),
);
),
Firebase 查询
static Stream<QuerySnapshot> getFeedPosts(String userId)
return tasksRef
.where('authorId', isEqualTo: userId)
.orderBy('timestamp', descending: true)
.snapshots();
【问题讨论】:
【参考方案1】:您应该在使用[]
运算符之前从QueryDocumentSnapshot
调用data()
方法:
return ListView(
children: documents
.map(
(doc) => TaskList(
currentUserId: widget.currentUserId,
task: doc.data()['id'],
user: doc.data()['ownerId'],
),
)
.toList(),
);
【讨论】:
我已经在模型中这样做了,但我需要再做一次吗? 我相信您期望来自 Firestore 的地图并尝试访问其键为id
和 ownerId
的条目的值。但是,doc
是 QueryDocumentSnapshot
。要从doc
访问地图,您需要先检索它,这将使用data()
方法。以上是关于流和 firebase 状态不佳的问题:DocumentSnapshotPlatform 中不存在字段的主要内容,如果未能解决你的问题,请参考以下文章