我是 dart 新手,我遇到了以下代码。这显然更新了 firebase 中的文档。有人能详细解释一下它到底有什么作用吗?
abstract class FirestoreDocumentUpdater {
static Future<void> update(
// ignore: use_function_type_syntax_for_parameters
DocumentReference<Map<String, dynamic>> documentRef,
Map<String, dynamic> map) {
debugPrint('update function called');
return documentRef.update(
Map.fromEntries(
map.entries.map(
(e) {
return MapEntry(
e.key,
switch (e.value) {
DateTime t => toJsonDateTime(t),
Duration d => toJsonDuration(d),
Enum t => t.name,
_ => e.value,
});
},
),
),
);
}
}
Timestamp? toJsonDateTime(DateTime? dateTime) {
if (dateTime == null) return null;
return Timestamp.fromDate(dateTime);
}
int toJsonDuration(Duration duration) {
return duration.inMicroseconds;
}
A
MapEntry
只是 Map
的元素。考虑这张地图:
Map a = {
'key' : 'value',
'foo' : 'bar'
}
这是一张带有地图条目
MapEntry('key','value')
和 MapEntry('foo','bar')
; 的地图
现在该代码所做的只是更改
Map
的值,以便某些值转换为另一个值。这张地图变成了:
enum ExampleEnum {
test
}
Map example = {
'date' : DateTime.now(),
'duration' : Duration(seconds: 6),
'enum' : ExampleEnum.test,
'other' : 'other'
}
进入
Map example = {
'date' : someTimeStamp,
'duration' : 6000,
'enum' : 'test',
'other' : 'other'
}