MapEntry 有何用途?

问题描述 投票:0回答:1

我是 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;
}
flutter firebase dart
1个回答
0
投票

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'
}
© www.soinside.com 2019 - 2024. All rights reserved.