【发布时间】:2021-03-15 14:04:30
【问题描述】:
FutureBuilder(future: Firestore.instance
.collection('items')
.document('itemId')
.collection('sold')
.document('sold')
.get(),
builder: (context, snapshot){
return (snapshot != null) ? Text(
'${snapshot.data['sold']}'
) : Text('not sold');}
我在这里使用 futureBuilder 编写了这段代码,希望小部件在 firestore 上“已售”文档的“已售”字段还没有值时显示“未售出”(“已售”文档尚未创建)。
但是当很明显snapshot为null的时候,由于没有创建document,它继续执行ternary的第一个选项,并尝试输出'${snapshot.data['sold']}',显示这个错误
The method '[]' was called on null.
Receiver: null
Tried calling: []("sold")
似乎它将“${snapshot.data['sold']}' 中的“snapshot.data”作为 null,这是正确的,因为尚未创建文档,但我不知道为什么它不考虑来自 '(snapshot != null)' 的快照不为空。
当创建了“sold”文档并且它不为空时,它会在屏幕上显示 '${snapshot.data['sold']}' 值。
只有三元在这里不起作用..
我搜索它并尝试使用“(snapshot.hasdata)”而不是“(snapshot != null)”,但没有任何改变。
我在这里做错了什么?
PS - 似乎文档实际上是空的,但不知何故认为它不是空的。我不知道这是否是 firestore 方面的问题,或者可能是 futureBuilder 被构建为使用一些初始数据状态进行初始化..
【问题讨论】:
-
我没有。我刚刚重新格式化了代码。
标签: flutter google-cloud-firestore