extension MapExtensions on Map { Map toggleKey(T wantedKey) { return map((key, value) => MapEntry(key, wantedKey == key ? !value : value)); } Map setKey(T? wantedKey, bool enable) { return map((key, value) => MapEntry(key, wantedKey == key ? enable : value)); } Map setKeys(Iterable wantedKey, bool enable) { var tempMap = map((key, value) => MapEntry(key, value)); for (var element in wantedKey) { tempMap = tempMap.setKey(element, enable); } return tempMap; } Map setAll(bool toggle) { return map((key, value) => MapEntry(key, toggle)); } List get included { return entries.where((entry) => entry.value).map((entry) => entry.key).toList(); } List get notIncluded { return entries.where((entry) => !entry.value).map((entry) => entry.key).toList(); } Map get enabledFirst { final enabled = Map.from(this)..removeWhere((key, value) => !value); final disabled = Map.from(this)..removeWhere((key, value) => value); return enabled..addAll(disabled); } bool get hasEnabled => values.any((element) => element == true); //Replaces only keys that exist with the new values Map replaceMap(Map oldMap, {bool enabledOnly = false}) { if (oldMap.isEmpty) return this; Map result = {}; forEach((key, value) { if (enabledOnly) { if (oldMap[key] == true) { result[key] = true; } else { result[key] = value; } } else { result[key] = oldMap[key] ?? false; } }); return result; } Map sortByKey(String Function(T value) keySelector) { final sortedEntries = entries.toList()..sort((a, b) => keySelector(a.key).compareTo(keySelector(b.key))); return Map.fromEntries(sortedEntries); } } extension MapExtensionsGeneric on Map { Map setKey(K? wantedKey, V newValue) { return map((key, value) => MapEntry(key, key == wantedKey ? newValue : value)); } Map setKeys(Iterable wantedKey, V value) { var tempMap = map((key, value) => MapEntry(key, value)); for (var element in wantedKey) { tempMap = tempMap.setKey(element, value); } return tempMap; } }