deleteSame function
this method will return a firstMap after remove all same values that match second map
Implementation
Map<String, dynamic> deleteSame(
Map<String, dynamic> firstMap,
Map<String, dynamic> secondMap, {
List<String> ignoreKeys = const [],
List<String> forceDelete = const [],
}) {
try {
final keys = firstMap.keys.toList();
for (var i = 0; i < keys.length; i++) {
final key = keys[i];
if (ignoreKeys.contains(key)) continue;
if (forceDelete.contains(key)) {
firstMap.remove(key);
continue;
}
if (firstMap[key] is Map && secondMap[key] is Map) {
final result = deleteSame(firstMap[key], secondMap[key],
ignoreKeys: ignoreKeys, forceDelete: forceDelete);
if (result.isEmpty) firstMap.remove(key);
} else if (firstMap[key] is List &&
secondMap[key] is List &&
(firstMap[key] as List).every((e) => e is Map) &&
(secondMap[key] as List).every((e) => e is Map)) {
for (var j = 0; j < firstMap[key].length; j++) {
deleteSame(firstMap[key][j], secondMap[key][j],
ignoreKeys: ignoreKeys);
}
(firstMap[key] as List).removeWhere((e) => e.isEmpty);
if (firstMap[key].isEmpty) firstMap.remove(key);
} else if (firstMap[key] is List && secondMap[key] is List) {
if (listEquals(firstMap[key], secondMap[key])) firstMap.remove(key);
} else if (firstMap[key] == secondMap[key]) {
firstMap.remove(key);
}
}
} catch (_) {}
return firstMap;
}