treeDeepMerge function

Map<String, dynamic> treeDeepMerge(
  1. Map<String, dynamic> map1,
  2. Map<String, dynamic> map2
)

Implementation

Map<String, dynamic> treeDeepMerge(
  Map<String, dynamic> map1,
  Map<String, dynamic> map2,
) {
  final result = <String, dynamic>{};

  // 先复制 map1 中的所有内容
  for (final key in map1.keys) {
    result[key] = map1[key];
  }

  // 然后合并 map2 中的内容
  for (final key in map2.keys) {
    if (!result.containsKey(key)) {
      // 如果 result 中不存在该键,直接添加
      result[key] = map2[key];
    } else {
      // 如果两边都存在,需要根据类型合并
      if (key == '__childFiles') {
        // 合并 __childFiles 列表并去重
        final List<String> mergedFiles = [
          ...result[key] as List<dynamic>,
          ...map2[key] as List<dynamic>,
        ].map((e) => e.toString()).toSet().toList();

        result[key] = mergedFiles;
      } else if (result[key] is Map && map2[key] is Map) {
        // 如果都是 Map,递归合并
        result[key] = treeDeepMerge(
          result[key] as Map<String, dynamic>,
          map2[key] as Map<String, dynamic>,
        );
      }
    }
  }

  return result;
}