Flutter 2 如何将List<dynamic>或Map<dynamic>强制转换为指定类型
Dart 中 Map<dynamic, dynamic> 转 Map<String, List<Map<String, dynamic>>> 实现方案
转换前置要求:原始
Map<dynamic, dynamic>的所有key运行时类型必须为String,所有value必须为List类型,且List内的元素均为键为String类型的Map,否则转换过程会抛出类型异常。
- 方法1:懒加载转换(适合大数据量场景)
使用Dart内置的cast方法实现惰性转换,不会立刻遍历全量数据,仅在实际访问元素时才会执行类型校验与转换
Map<dynamic, dynamic> originMap = ; // 填入你的原始动态Map Map<String, List<Map<String, dynamic>>> targetMap = originMap.cast<String, List<Map<String, dynamic>>>();
- 方法2:显式遍历转换(更安全,推荐常规场景使用)
立刻遍历全量元素完成转换,可提前暴露类型不匹配问题,避免后续业务逻辑运行时才触发异常
Map<dynamic, dynamic> originMap = ; // 填入你的原始动态Map Map<String, List<Map<String, dynamic>>> targetMap = {}; originMap.forEach((key, value) { String newKey = key as String; List<Map<String, dynamic>> newValue = (value as List).cast<Map<String, dynamic>>(); targetMap[newKey] = newValue; });
- 方法3:深层全量转换(适配内层Map为dynamic类型的场景)
如果原始数据中List内的Map为Map<dynamic, dynamic>类型,需要逐层做转换的场景使用:
Map<dynamic, dynamic> originMap = ; // 填入你的原始动态Map Map<String, List<Map<String, dynamic>>> targetMap = originMap.map((key, value) { String newKey = key as String; List<Map<String, dynamic>> newValue = (value as List).map((item) { return (item as Map).cast<String, dynamic>(); }).toList(); return MapEntry(newKey, newValue); });
内容的提问来源于stack exchange,提问作者Da2ny
相关产品推荐
相关产品推荐

