繁体   English   中英

使用 Flutter 同步 Firestore 时在 Null 上调用了方法 []

[英]The method [] was called on Null while syncing Firestore using Flutter

我试图同步用户硬币,但遇到了这个错误:方法 [] 被调用在 Null 上。 如何使用 Firestore 动态显示他的硬币?

 Widget firestoreBuild2(BuildContext context) {
    return StreamBuilder(
      stream: Firestore.instance.collection('users').document('id').snapshots(),
      builder: (context, snapshot) {
        if (snapshot.hasError)
          return  Text('Error: ${snapshot.error}');
        switch (snapshot.connectionState) {
          case ConnectionState.waiting: return  Text('Loading...');
          default:
            var userDocument = snapshot.data;
            return  Text(
            userDocument["coins"],
            textAlign: TextAlign.center,
            style: TextStyle(
              fontFamily: AppTheme2.fontName,
              fontWeight: FontWeight.normal,
              fontSize: 24,
              letterSpacing: 0.0,
              color: AppTheme2.white,
           ),
          ); 
        }
      },
    );
  }
}

原来发生这种情况的原因是因为我正在获取一个字符串 'id' 而不是我的变量 id,这就是它导致空错误的原因。

snapshot.connectionState 有四个可能的值:none、waiting、active 或 done。 我不确定连接状态与快照是否有数据之间的关系。

但是你可以做的一件事是检查是否snapshot.hasData,如果snapshot.data为空,它将返回false。

Widget firestoreBuild2(BuildContext context) {
    return StreamBuilder(
      stream: Firestore.instance.collection('users').document('id').snapshots(),
      builder: (context, snapshot) {
        if (!snapshot.hasData)
          return  Text('Loading ...');

        var userDocument = snapshot.data;
        return  Text(
          userDocument["coins"],
          textAlign: TextAlign.center,
          style: TextStyle(
            fontFamily: AppTheme2.fontName,
            fontWeight: FontWeight.normal,
            fontSize: 24,
            letterSpacing: 0.0,
            color: AppTheme2.white,
          ), 
        );
      },
    );
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM