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); Map replaceMap(Map oldMap) { Map result = {}; forEach((key, value) { result[key] = oldMap[key] ?? false; }); return result; } } 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; } }