方法 '[]' 不能无条件调用,因为接收者可以是 'null' StreamBuilder

时间:2021-06-10 10:24:08

标签: flutter dart google-cloud-firestore nullable

我最近将我的 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”定义运算符“[]”。尝试定义 运算符“[]”。

2 个答案:

答案 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() 如果您获得的是单个文档。