mergeMaps method

Map<String, dynamic> mergeMaps(
  1. Map<String, dynamic> itemB, {
  2. bool preferThis = false,
  3. Set<String>? nonOverridableKeys,
})

Implementation

Map<String, dynamic> mergeMaps(Map<String, dynamic> itemB,
    {
      bool preferThis = false,
      Set<String>? nonOverridableKeys,
    }
) {
  final merged = <String, dynamic>{};
  final allKeys = {...keys, ...itemB.keys};
  nonOverridableKeys ??= {};

  for (var key in allKeys) {
    final valueA = this[key];
    final valueB = itemB[key];

    if (nonOverridableKeys.contains(key) && valueA != null) {
      merged[key] = valueA;
    } else if (valueA != null && valueB != null) {
      merged[key] = preferThis ? valueA : valueB;
    } else if (valueA != null) {
      merged[key] = valueA;
    } else if (valueB != null) {
      merged[key] = valueB;
    } else {
      merged[key] = null;
    }
  }

  return merged;
}