问题描述
我一直在想使用哪个来读取FireStore快照,因为我可以只使用fromSnapshot,因为 snapshot ["fieldName"]
可以正常工作.
I have been wondering which to use for reading a FireStore snapshot, as I can just use fromSnapshot as snapshot["fieldName"]
works just fine.
现在,我在Google代码实验室的 https://上找到了一个示例codelabs.developers.google.com/codelabs/flutter-firebase/#10
Now, I found an example in Google codelabs at https://codelabs.developers.google.com/codelabs/flutter-firebase/#10
这是确定的方法吗?例如fromSnapshot,然后将fromMap用于snapshot.data?如果我不使用fromMap怎么办?我输了什么?然后,我也看到了fromJson而不是fromMap ...
Is this way the definitive way to go? Eg fromSnapshot, and then use fromMap for snapshot.data? What if I dont use fromMap? What am I losing? And then, I have also seen fromJson instead of 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>";
}
推荐答案
对此没有唯一的明确答案.将 Map
传递到数据类可确保您还可以使用非Firestore数据创建对象.但是另一方面,传递 DocumentSnapshot
可以确保您在需要时可以使用该对象中的任何其他元数据(几乎每一个都可以,但是仍然可以).
There is no singular definitive answer for this. Passing a Map
into your data class ensures that you can also create an object from data that doesn't come from Firestore. But on the other hand, passing a DocumentSnapshot
ensures that you can make use of any extra metadata in that object if needed (it hardly every is, but still).
我认为 Record
类中的方法非常惯用:它允许您在不使用Firestore的地方(例如单元测试)使用 fromMap
,但是当您实际上是从Firestore获取数据时,然后传递 DocumentSnapshot
.
I think the approach in the Record
class is pretty idiomatic: it allows you to use fromMap
in places (for example unit tests) that don't use Firestore, but then pass in the DocumentSnapshot
when you're actually getting the data from Firestore.
但是正如所说的那样:这些方法都不是错误的,选择一种方法既是个人喜好,又是社区不断发展的习惯用法.
But as said: none of these approaches is wrong, and picking one is as much personal preference as it is an evolving idiom from the community.
这篇关于FireStore fromSnapshot vs fromMap用于读取DocumentSnapshot?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!