【问题标题】:How do I get data from Firebase using FlutterFire Firestore and Flutter 2.0 with Null Safety如何使用具有 Null 安全性的 FlutterFire Firestore 和 Flutter 2.0 从 Firebase 获取数据
【发布时间】: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 来修复类型。

标签: firebase flutter dart google-cloud-firestore


【解决方案1】:

好的,找到了我的问题。我有这样定义的“_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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 2020-05-01
      • 2021-06-28
      • 2022-09-23
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多