class GameData { List playerNames; Map pars; Map> scores; DateTime date; GameData({ this.playerNames = const [], this.pars = const {}, this.scores = const {}, required this.date, }); Map toJson() => { 'playerNames': playerNames, 'pars': pars.map((key, value) => MapEntry(key.toString(), value)), 'scores': scores.map((key, value) => MapEntry(key.toString(), value)), 'date': date.toIso8601String(), // No need to serialize 'winner' as it's derived from scores }; factory GameData.fromJson(Map json) => GameData( playerNames: List.from(json['playerNames']), pars: Map.from(json['pars'].map((key, value) => MapEntry(int.parse(key), value))), scores: Map>.from(json['scores'].map((key, value) => MapEntry(int.parse(key), List.from(value)))), date: DateTime.parse(json['date']), ); }