flutter - NoSuchMethodError:null 上的无效成员:'_get'
问题描述
完整的错误信息:
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 的版本,但仍然无法正常工作
解决方案
正如您的错误日志所说,您正在访问null
成员的某些值。
看来,错误在于您的工厂方法。在 Flutter 中,要访问 documentSnapshot 中的所有数据,Map<String, dynamic>
必须使用doc.data
.
DocumentSnapshot
在此之前,我们可以在using中检查文档是否存在doc.exists
。如需进一步参考 - 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,因此不会导致错误。
推荐阅读
- vim - 覆盖标签栏中的方法
- java - 来自 java REST 服务的声音播放在 iOS Safari 和 Chrome 中提前结束
- django - 带有 django-rest-auth 和 django-rest-knox 的 AttributeError - 令牌序列化器
- angular - Nativescript 构建开始挂起
- angular - 如何在 Angular 6 的 queryParams 中解码特殊字符?
- swift - Swift Programming Beginner:为什么在实现变量时我的循环中有错误?
- http - GatsbyJS + Google Analytics =“无 HTTP 响应”错误?
- css - 为什么我在 .row 中的所有元素的高度都不相同?
- c++ - 使用 Media Foundation 源阅读器阅读 3D(左右)视频
- python-3.x - Keras - 基于用户输入的 EarlyStopping