merge static method

Map<String, dynamic> merge({
  1. required Map<String, dynamic> current,
  2. required Map<String, dynamic> origin,
  3. List<String> namePath = const [],
})

合并配置信息

current 需要合并的配置信息 namePath 需要合并的路径

Implementation

static Map<String, dynamic> merge({
  required Map<String, dynamic> current,
  required Map<String, dynamic> origin,
  List<String> namePath = const [],
}) {
  Map<String, dynamic> map = Map.from(origin);
  if (namePath.isNotEmpty) {
    for (int i = 0; i < namePath.length; i++) {
      final isLast = i == (namePath.length - 1);
      final p = namePath[i];
      final tmp = map[p];
      if (!isLast) {
        if (tmp is Map && tmp[p] is Map) {
          map = tmp[p] as Map<String, dynamic>;
        } else {
          // 如果要求嵌套,但目前不是,则默认覆盖为Map
          map[p] = <String, dynamic>{};
        }
      } else {
        // 若tmp不是Map, 则默认覆盖为Map
        map[p] = _computeAndMerge(
          tmp is Map ? tmp as Map<String, dynamic> : {},
          current,
        );
      }
    }
  } else {
    map = {
      ...map,
      ...current,
    };
  }

  return map;
}