如何使用具有 Null 安全性的 FlutterFire Firestore 和 Flutter 2.0 从 Firebase 获取数据
Posted
技术标签:
【中文标题】如何使用具有 Null 安全性的 FlutterFire Firestore 和 Flutter 2.0 从 Firebase 获取数据【英文标题】:How do I get data from Firebase using FlutterFire Firestore and Flutter 2.0 with Null Safety 【发布时间】:2021-07-27 18:08:44 【问题描述】:我收到代码“snapshot.Data()”的错误。这是对 Firestore 的重大更改之一,快照现在属于“DocumentSnapshot
中断:通过数据获取器获取快照的数据现在通过 data() 方法完成。
新文档中提供的示例对我没有帮助。
“参数类型'对象?'不能赋值给参数类型'Map
'"
我尝试了许多组合,但我无法摆脱错误。另外,我没有使用流,我只想读取单个记录。
代码如下:
var snapshot = await _reference.doc(_user.uid).get();
return UserData.fromMap(snapshot.data());
这里是模型“fromMap”:
factory UserData.fromMap(Map<String, dynamic> map)
return UserData(
birthday: DateTime.fromMillisecondsSinceEpoch(map['birthday']),
gender: map['gender'],
isDarkMode: map['isDarkMode'],
isMetric: map['isMetric'],
name: map['name'],
password: map['password'],
);
【问题讨论】:
你在哪里得到这个错误?如,哪段代码抛出错误?这只是一些缺少类型错误和可为空的问题。可以通过显式类型转换让编译器知道它是 Map好的,找到了我的问题。我有这样定义的“_reference”:
final CollectionReference _reference = FirebaseFirestore.instance.collection('users');
我应该这样做:
final CollectionReference<Map<String, dynamic>> _reference = FirebaseFirestore.instance.collection('users');
或者只是这样:
final _reference = FirebaseFirestore.instance.collection('users');
【讨论】:
【参考方案2】:改成这样:
factory UserData.fromMap(Map<String, dynamic>? map) //added a "?" after dynamic.
这使您的 fromMap 方法接受可为空的值,理论上,如果文档不存在,您的 firebase 查询可以返回 null。
【讨论】:
以上是关于如何使用具有 Null 安全性的 FlutterFire Firestore 和 Flutter 2.0 从 Firebase 获取数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 <Offsets> 列表中添加空值? null 不能添加,因为颤振 null 安全