enum MeteringScreenLayoutFeature { extremeExposurePairs, // 0 filmPicker, // 1 equipmentProfiles, // 3 } typedef MeteringScreenLayoutConfig = Map; extension MeteringScreenLayoutConfigJson on MeteringScreenLayoutConfig { static MeteringScreenLayoutConfig fromJson(Map data) { int? migratedIndex(MeteringScreenLayoutFeature feature) { switch (feature) { case MeteringScreenLayoutFeature.extremeExposurePairs: return 0; case MeteringScreenLayoutFeature.filmPicker: return 1; case MeteringScreenLayoutFeature.equipmentProfiles: return 3; default: return null; } } return { for (final f in MeteringScreenLayoutFeature.values) f: (data[migratedIndex(f).toString()] ?? data[f.name]) as bool? ?? true }; } Map toJson() => map((key, value) => MapEntry(key.name, value)); }