我最近将我的 flutter 升级到了最新版本,但出现了所有空安全错误。
StreamBuilder(
stream: FirebaseFirestore.instance
.collection('restaurants')
.doc(partnerId)
.snapshots(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(
child: CircularProgressIndicator(),
);
}
final restaurant = snapshot.data;
startTime = restaurant['startTime'].toDate();
endTime = restaurant['endTime'].toDate();
将 restaurant[''] 分配给任何变量时出现以下错误。
<块引用>方法'[]'不能无条件调用,因为接收者 可以为“空”。
如果我这样做 - restaurant!['endTime'].toDate();
,就会出现新的错误
未为类型“Object”定义运算符“[]”。尝试定义 运算符“[]”。
答案 0 :(得分:1)
尝试将 snapshot.data
转换为您的流返回的任何内容。
示例:
如果您的流返回 Map
,这是您的代码:
StreamBuilder(
stream: FirebaseFirestore.instance
.collection('restaurants')
.doc(partnerId)
.snapshots(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(
child: CircularProgressIndicator(),
);
}
// dont forget to assume that your stream may
// have an error, or dont return data.
if(!snapshot.hasData) return Container();
final restaurant = snapshot.data as Map;
startTime = restaurant['startTime'].toDate();
endTime = restaurant['endTime'].toDate();
答案 1 :(得分:0)
snapshot.data
是一个 AsyncSnapshot
。您必须执行以下操作:
Map<String, dynamic> restaurant = snapshot.data.data()
如果您获得的是单个文档。