我正在通过文档 ID 获取数据,但出现此错误:
错误状态:无法在不存在的 DocumentSnapshotPlatform 上获取字段
并且它工作,我可以通过文档 ID 从 firebase 获取数据,但它在调试控制台中给出了错误。
我正在使用 StreamBuilder 获取数据:
StreamBuilder(
stream: _databaseService.productCollection.doc(docID).snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(
valueColor:
new AlwaysStoppedAnimation<Color>(Colorsx.mainColor),
),
);
}
var document1 = snapshot.data;
return Container(
decoration: BoxDecoration(
color: Colorsx.mainColor,
borderRadius: radius,
),
// color: Colorsx.mainColor,
child: Column(
children: [
Expanded(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Chip(
label: LabelText1("Ürün Adı: "),
backgroundColor: Colorsx.mainColor,
),
Chip(
shadowColor: Colorsx.mainColor2,
elevation: 24,
label: LabelText1(document1["productName"] ?? ""),
backgroundColor: Colorsx.mainColor2,
),
],
),
),
],
),
);
},
),
我找不到这里的问题,但根据我的研究,它与地图有关。 有什么想法吗?
答案 0 :(得分:1)
看起来 _databaseService.productCollection.doc(docID)
可能在此代码运行时的某个时刻未指向现有文档。如果您随后对其调用 document1["productName"]
,则会引发您看到的错误。
所以你需要决定在这种情况发生时渲染什么(即使只是短暂的)。例如,您可以让 CircularProgressIndicator
一直停留在屏幕上,直到有文档可用:
if (!snapshot.hasData || !snapshot.data.exists) {
答案 1 :(得分:0)
如果您使用的是 cloud_functions ^2 并且使用的是 1,则您可能会遇到此问题,处理该错误的唯一方法是使用 try catch 函数
getSnapshot(DocumentSnapshot snapshot, String key) {
try {
return snapshot.get(key);
} catch (error) {
return null;
}
}
然后调用它
Status.fromSnapShot(DocumentSnapshot snapshot)
: assert(snapshot.exists != false),
name = getSnapshot(snapshot, 'name'),
以前是这样的
Status.fromSnapShot(DocumentSnapshot snapshot)
: assert(snapshot.exists != false),
name = snapshot.data()['name'],