NoSuchMethodError:null 上的无效成员:'_get'

Posted

技术标签:

【中文标题】NoSuchMethodError:null 上的无效成员:\'_get\'【英文标题】:NoSuchMethodError: invalid member on null: '_get'NoSuchMethodError:null 上的无效成员:'_get' 【发布时间】:2021-04-28 00:12:27 【问题描述】:

完整的错误信息:

The following JSNoSuchMethodError was thrown building FutureBuilder<DocumentSnapshot>(dirty, state: _FutureBuilderState<DocumentSnapshot>#dfc82):
NoSuchMethodError: invalid member on null: '_get'

它来自这一行:UserModel user = UserModel.fromDoc(snapshot.data);它在:

body: FutureBuilder(
        future: usersRef.doc(widget.userId).get(),
        builder: ( context,  snapshot) 
          List<Widget> children;
          if (!snapshot.hasData) 
            return Center(
              child: CircularProgressIndicator(),
            );
          
          else if (snapshot.hasData) 
            // print('user snapshot data is: $snapshot.data');
            UserModel user = UserModel.fromDoc(snapshot.data);

模型看起来像:

factory UserModel.fromDoc(DocumentSnapshot doc) 
    return UserModel(
      id: doc.data()['id'],
      name: doc.data()['name'],
      username: doc.data()['username'],
      password: doc.data()['password'],
      profileImageUrl: doc.data()['profileImageUrl'],
      email: doc.data()['email'] ,
      userIds: doc.data()['userIds'] ?? '',
    );
  

我尝试降级 cloud_firestore 的版本,但还是不行

【问题讨论】:

你检查过FutureBuilder中的快照数据吗? 您是否调试过snapshot.data 值或doc.data() @fartem 它给了我('DocumentSnapshot' 的实例) @MuthuThavamani Idk 怎么做,因为我不能在课堂上做,所以我在 FutureBuilder 做,它给了我 null :/ @Arb,已更新答案。我更喜欢处理所有connectionstates,包括error,否则你的屏幕会卡在CircularProgressIndicator,用户很难知道原因。 【参考方案1】:

正如您的错误日志所说,您正在访问 null 成员的某个值。

看来,错误在于您的工厂方法。在 Flutter 中,要访问 Map&lt;String, dynamic&gt; 中的 documentSnapshot 中的所有数据,必须使用 doc.data

在此之前,我们可以使用doc.exists 检查DocumentSnapshot 中的文档是否存在。如需进一步参考 - https://firebase.flutter.dev/docs/firestore/usage/

我更喜欢处理所有connectionstate 包括错误,否则您的屏幕会卡在 CircularProgressIndicator 中,用户很难知道原因。

if (snapshot.hasError) 
     return Text("Something went wrong");
 else if (snapshot.connectionState == ConnectionState.done) 
     Map<String, dynamic> data = snapshot.data.data;
     return Widget;
 else 
    return Center(
     child: CircularProgressIndicator());

另一种情况:如果 firestore 中不存在文档,则读取 (snapshot.data) 将返回 null。然而,这个 null 情况由 futurebuilder connectionState 在内部处理。根据您的调试结果,由于snapshot.data 具有 DocumentSnapshot,因此不会导致错误。

【讨论】:

作为菜鸟,我没有将数据从另一个屏幕传递给它,感谢您花时间回答这个问题!

以上是关于NoSuchMethodError:null 上的无效成员:'_get'的主要内容,如果未能解决你的问题,请参考以下文章

NoSuchMethodError:null 上的无效成员:'toList'(Flutter Web)_MapStream<QuerySnapshot 引发了异常

Flutter:[cloud_firestore/unknown] NoSuchMethodError:null 上的无效成员:'includeMetadataChanges'(Flutter Web

NoSuchMethodError(NoSuchMethodError:方法'[]'在null上被调用。接收者:null尝试调用:[](“title”))

NoSuchMethodError (NoSuchMethodError: 方法 'map' 在 null 上被调用

例外:NoSuchMethodError:在 null 上调用了 getter 'uid'。接收方:null 尝试调用:uid

Flutter:NoSuchMethodError:方法 'fetchByID' 在 null 上被调用。接收方:null 尝试调用:fetchByID(2)