1

我是颤振/飞镖编码的新手,请帮我解决以下问题:

这是我试图从 FireStore 集合“DinnerNames”中获取数据的代码,但我在该行的snapshot.data对象上得到一个分析错误:

itemCount:snapshot.data.documents.length

问题:

值可以为 'null' 的表达式必须先进行 null 检查,然后才能取消引用。在取消引用之前尝试检查该值是否为“null”。

这是生成错误的代码示例:

CollectionReference dinners =
        FirebaseFirestore.instance.collection('DinnerNames');

    return Scaffold(
      appBar: AppBar(
        title: Text('My Dinner Voting App'),
      ),
      body: StreamBuilder(
          stream: dinners.snapshots(),
          builder: (context, snapshot){
            if (!snapshot.hasData) return const Text('Firestore snapshot is loading..');
            
            if (!snapshot.hasError)
              return const Text('Firestore snapshot has error..');
            
            if (snapshot.data == null){
              return const Text("Snapshot.data is null..");
            }else{
               return ListView.builder(
              itemExtent: 80.0,
              itemCount:  snapshot.data.documents.length,
              itemBuilder: (context, index) =>
                  _buildListItem(context, snapshot.data.documents[index]),
            ); 
            }           
          }
          ),
    );

这是颤振版本:

dave@DaveMacBook-Pro firebasetest % flutter --version
Flutter 1.25.0-8.2.pre • channel beta • https://github.com/flutter/flutter.git
Framework • revision b0a2299859 (2 weeks ago) • 2021-01-05 12:34:13 -0800
Engine • revision 92ae191c17
Tools • Dart 2.12.0 (build 2.12.0-133.2.beta)
4

2 回答 2

1

如果您确定该对象不是null在您使用它时,只需插入一个 Bang!运算符来消除可空性,如下所示:

ListView.builder(
  itemCount: snapshot.data!.docs.length, // <-- Notice '!'
)
于 2021-05-27T15:28:37.330 回答
0

您已经在检查:

snapshot.data == null

但似乎分析表明文档也可以为空,因此请尝试包括:

if (snapshot.data.documents != null) { ... do what you need }

或尝试更改此代码:

if (snapshot.data == null){
  return const Text("Snapshot.data is null..");
}

对此:

if (snapshot.data == null || snapshot.data.documents == null){
  return const Text("Snapshot.data is null..");
}
于 2021-01-22T13:55:37.900 回答