NoSuchMethodError:在 null 上调用了方法“[]”。接收方:空。尝试调用:[]("name")

Posted

技术标签:

【中文标题】NoSuchMethodError:在 null 上调用了方法“[]”。接收方:空。尝试调用:[]("name")【英文标题】:NoSuchMethodError: The method '[]' was called on null. Receiver: null. Tried calling: []("name") 【发布时间】:2020-08-04 14:43:53 【问题描述】:

我正在尝试从 firestore 中检索单个文档,当文档存在时它应该返回数据,当文档不存在时它应该返回空数据,到目前为止我尝试了什么:

  @override
  Widget build(BuildContext context) 

    return StreamBuilder(
      stream: Firestore.instance.collection('Profile').document(user.uid).snapshots(),
 
      builder: (context, snapshot) 

        if (!snapshot.hasData) 
          return new showProfile(
            name: "null",
            email: "null",
            pin: "null",
            state: "null",
          );
        else 
          var userDocument = snapshot.data;
          return new showProfile(
            name: userDocument["name"],
            email: userDocument["email"],
            pin: userDocument["pin"],
            state: userDocument["state"],
          );
        
      ,
    );
  

但我收到此错误

【问题讨论】:

不应该是Firestore.collection 而应该是Firestore.instance.collection @Captivity 不应该。 【参考方案1】:

snapshot.data 为 null 因此您会收到该错误,很可能 user.uid 为 null 这就是您没有获得任何数据的原因,您必须执行以下操作:

Stream<DocumentSnapshot> getData() async*
var user = await FirebaseAuth.instance.currentUser();
yield* Firestore.instance.collection('Profile').document(user.uid).snapshots()

然后在StreamBuilder里面使用getData()的方法:

   return StreamBuilder(
      stream: getData(),

【讨论】:

以上是关于NoSuchMethodError:在 null 上调用了方法“[]”。接收方:空。尝试调用:[]("name")的主要内容,如果未能解决你的问题,请参考以下文章

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

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

NoSuchMethodError:在 null 上调用了方法 '[]' - Flutter

NoSuchMethodError:方法 'ancestorStateOfType' 在 null 上被调用

颤振和json:NoSuchMethodError:方法'[]'在null上被调用

Flutter - NoSuchMethodError:方法'[]'在null上被调用