【问题标题】:FireStore fromSnapshot vs fromMap for reading DocumentSnapshot?FireStore fromSnapshot 与 fromMap 用于读取 DocumentSnapshot?
【发布时间】:2020-08-16 16:39:03
【问题描述】:

我一直想知道使用哪个来读取 FireStore 快照,因为我可以使用 fromSnapshot,因为 snapshot["fieldName"] 工作正常。

现在,我在 https://codelabs.developers.google.com/codelabs/flutter-firebase/#10 的 Google 代码实验室中找到了一个示例

这条路是确定的方法吗?例如fromSnapshot,然后使用fromMap 获取snapshot.data?如果我不使用 fromMap 怎么办?我失去了什么?然后,我也看到了 fromJson 而不是 fromMap...

class Record {
 final String name;
 final int votes;
 final DocumentReference reference;

 Record.fromMap(Map<String, dynamic> map, {this.reference})
     : assert(map['name'] != null),
       assert(map['votes'] != null),
       name = map['name'],
       votes = map['votes'];

 Record.fromSnapshot(DocumentSnapshot snapshot)
     : this.fromMap(snapshot.data, reference: snapshot.reference);

 @override
 String toString() => "Record<$name:$votes>";
}

【问题讨论】:

  • this.fromMap(... 现在产生错误:无法将参数类型 'Map Function()' 分配给参数类型 'Map' . - 'Map' 来自 'dart:core'。 : this.fromMap(snapshot.data, reference: snapshot.reference);

标签: flutter google-cloud-firestore


【解决方案1】:

对此没有单一的明确答案。将Map 传递到您的数据类可确保您还可以从并非来自 Firestore 的数据创建对象。但另一方面,传递 DocumentSnapshot 可确保您可以在需要时使用该对象中的任何额外元数据(几乎每个都如此,但仍然如此)。

我认为 Record 类中的方法非常惯用:它允许您在不使用 Firestore 的地方(例如单元测试)使用 fromMap,然后在您使用时传入 DocumentSnapshot '实际上是从 Firestore 获取数据。

但如前所述:这些方法都没有错,选择一种方法既是个人偏好,也是社区不断演变的习语。

【讨论】:

    猜你喜欢
    • 2021-01-05
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 2018-03-28
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    相关资源
    最近更新 更多