【发布时间】:2021-09-24 05:32:12
【问题描述】:
我正在尝试根据用户是否正在搜索另一个用户来从流构建器接收数据,但在数据加载前大约 1 秒我收到错误消息。该错误表示文档快照中不存在“字段名”。它存在并在一秒钟后正常加载(可能在搜索字段时,它显示错误并在找到该字段时将其删除)。我怎样才能摆脱它。提前致谢。 我使用具有 null 安全性的颤振和 firebase。
代码:
body: StreamBuilder(
stream: homePageStream,
builder: (context, snapshot) {
return snapshot.hasData
? ListView.builder(
itemCount: (snapshot.data as QuerySnapshot).docs.length,
itemBuilder: (context, index) {
var dataSnapshot = snapshot.data as QuerySnapshot;
var DocData = dataSnapshot.docs[index];
return Container(
padding: EdgeInsets.symmetric(vertical: 10,),
decoration: BoxDecoration(
border: Border(),
borderRadius: BorderRadius.circular(12),
color: Colors.black38,),
child: isSearching
? Column(
children: [
Center(
child: Text(
DocData['Name'],
style: TextStyle(
color: Colors.white, fontSize: 24),
)),
Center(
child: Text(
DocData['Email'],
style: TextStyle(
color: Colors.white.withOpacity(0.6),
fontSize: 20),
))
],
)
: Center(
child: Text(
DocData['Name'],
style: TextStyle(
color: Colors.white, fontSize: 24),
)));
})
: Center(child: CircularProgressIndicator());
这是主页流,按下按钮会改变
if (SearchUserController.text != '') {
setState(() {
isSearching = true;
homePageStream = FirebaseFirestore.instance
.collection('Users')
.where('Name', isEqualTo: SearchUserController.text)
.snapshots();
});
} else {
setState(() {
isSearching = false;
homePageStream = FirebaseFirestore.instance
.collection('Users')
.doc(userMail)
.collection('Chat rooms')
.snapshots();
});
}
它们都是查询快照,userMail 是预定义的字符串。
我确定该字段存在,并且代码在显示错误 1 秒后确实找到了它。错误就是问题所在,我希望它等待数据而不是显示错误。
错误
======== Exception caught by widgets library =======================================================
The following StateError was thrown building:
Bad state: field does not exist within the DocumentSnapshotPlatform
When the exception was thrown, this was the stack:
#0 DocumentSnapshotPlatform.get._findKeyValueInMap (package:cloud_firestore_platform_interface/src/platform_interface/platform_interface_document_snapshot.dart:86:7)
#1 DocumentSnapshotPlatform.get._findComponent (package:cloud_firestore_platform_interface/src/platform_interface/platform_interface_document_snapshot.dart:104:41)
#2 DocumentSnapshotPlatform.get (package:cloud_firestore_platform_interface/src/platform_interface/platform_interface_document_snapshot.dart:120:26)
#3 _JsonDocumentSnapshot.get (package:cloud_firestore/src/document_snapshot.dart:92:48)
#4 _JsonDocumentSnapshot.[] (package:cloud_firestore/src/document_snapshot.dart:96:40)
...
====================================================================================================
但是我仍然得到所需的结果。 此外,这种情况每次启动仅发生一次。切换回最后一个流或更新它不会导致错误(可能是因为它已经被加载了)。 请帮忙
编辑:我认为问题在于显示错误时未加载该值。有什么方法可以在应用启动时加载文档快照值。
【问题讨论】:
-
屏幕加载可能会显示红色错误屏幕,如果值在从 Firebase 获取之前为空,请尝试检查不为空,然后使用值
-
怎么做?
-
我已经在使用 snapshot.hasData。我如何对字段进行空检查
-
可能会像这样检查空值.. (passportNumber != null) ? ProfileListTile(title: "Passport Number", value: "${model.userProfile.passportNumber}", iconColor: Colors.blue, icon: Icons.email, ) : Container(),
-
您能否将其添加为答案。像这样很难理解
标签: android firebase flutter google-cloud-firestore