Dart 将 Map<dynamic,dynamic> 转换为 Map<String, List<String>>

Sam*_*lov 4 dart flutter google-cloud-firestore

如何转换这样的Map

Map<dynamic, dynamic> a = {2022-04-10: [8:00, 15:00]}; //No quotes
Run Code Online (Sandbox Code Playgroud)

获得:

Map<String, List<String>> b = {"2022-04-10": ["8:00", "15:00"]};
Run Code Online (Sandbox Code Playgroud)

我尝试这样做,但它对我不起作用。没有错误,但是如果你调用 print,什么也不会发生:

String str = '{2022-04-10: [8:00, 15:00]}';
final Map<dynamic, dynamic> dynamicMapFromJson = json.decode(str);
Map<String, List<String>> schedule = dynamicMapFromJson.cast<String, List<String>>();
Run Code Online (Sandbox Code Playgroud)

我正在从 Firebase 教授这张地图:

在此输入图像描述

await FirebaseFirestore.instance
        .collection('call')
        .get()
        .then((QuerySnapshot querySnapshot) {
      for (var doc in querySnapshot.docs) {
        Map<String, List<String>> _schedule = doc.get('schedule');
      }
    });
Run Code Online (Sandbox Code Playgroud)

小智 7

你的地图是

Map<dynamic, dynamic> a = {"2022-04-10": ["8:00", "15:00"]};
Run Code Online (Sandbox Code Playgroud)

你可以通过两种方式转换它

Map<dynamic, dynamic> a = {"2022-04-10": ["8:00", "15:00"]};
Map<String, List<String>> converted = {};

// 1st way:
for (var item in a.keys)
  converted[item.toString()] = List<String>.from(a[item]);
 
// 2nd way:
for (var item in a.keys)
{
  List<String> _new = [];
  for (var newItem in List.from(a[item]))
     _new.add(newItem.toString());
  converted[item.toString()] = _new;
}
Run Code Online (Sandbox Code Playgroud)