extension ExtraList on List { bool replace(E old, E newItem) { final index = indexOf(old); if (index == -1) return false; this[index] = newItem; return true; } } extension ExtraSet on Set { bool replace(E old, E newItem) { if (!remove(old)) return false; add(newItem); return true; } } extension ExtraMapNullableKey on Map { Map whereNotNullKey() => {for (var v in keys.nonNulls) v: this[v] as V}; } extension ExtraMapNullableValue on Map { Map whereNotNullValue() => {for (var kv in entries.where((kv) => kv.value != null)) kv.key: kv.value as V}; } extension ExtraMapNullableKeyValue on Map { Map whereNotNullKey() => {for (var v in keys.nonNulls) v: this[v]}; Map whereNotNullValue() => {for (var kv in entries.where((kv) => kv.value != null)) kv.key: kv.value as V}; } extension ExtraNumIterable on Iterable { int get sum => fold(0, (prev, v) => prev + (v ?? 0)); } extension ExtraEnum on Iterable { T safeByName(String name, T defaultValue) { try { return byName(name); } catch (error) { return defaultValue; } } }