diff --git a/lib/presentation/views/main_menu/match_view/create_match/create_match_view.dart b/lib/presentation/views/main_menu/match_view/create_match/create_match_view.dart index e106de7..a66178e 100644 --- a/lib/presentation/views/main_menu/match_view/create_match/create_match_view.dart +++ b/lib/presentation/views/main_menu/match_view/create_match/create_match_view.dart @@ -20,11 +20,14 @@ import 'package:provider/provider.dart'; class CreateMatchView extends StatefulWidget { /// A view that allows creating a new match /// [onWinnerChanged]: Optional callback invoked when the winner is changed - const CreateMatchView({super.key, this.onWinnerChanged}); + const CreateMatchView({super.key, this.onWinnerChanged, this.match}); /// Optional callback invoked when the winner is changed final VoidCallback? onWinnerChanged; + /// An optional match to prefill the fields + final Match? match; + @override State createState() => _CreateMatchViewState(); } @@ -83,6 +86,19 @@ class _CreateMatchViewState extends State { filteredPlayerList = List.from(playerList); }); }); + + if (widget.match != null) { + final match = widget.match!; + _matchNameController.text = match.name; + selectedGroup = match.group; + selectedGroupId = match.group?.id ?? ''; + selectedPlayers = match.players ?? []; + if (selectedGroup != null) { + filteredPlayerList = playerList + .where((p) => !selectedGroup!.members.any((m) => m.id == p.id)) + .toList(); + } + } } @override @@ -229,6 +245,6 @@ class _CreateMatchViewState extends State { /// - Either a group is selected OR at least 2 players are selected bool _enableCreateGameButton() { return (selectedGroup != null || - (selectedPlayers != null && selectedPlayers!.length > 1)); + (selectedPlayers != null && selectedPlayers!.length > 1)); } } diff --git a/lib/presentation/views/main_menu/match_view/match_profile_view.dart b/lib/presentation/views/main_menu/match_view/match_profile_view.dart index 6558916..d301f9e 100644 --- a/lib/presentation/views/main_menu/match_view/match_profile_view.dart +++ b/lib/presentation/views/main_menu/match_view/match_profile_view.dart @@ -5,6 +5,7 @@ import 'package:game_tracker/data/db/database.dart'; import 'package:game_tracker/data/dto/match.dart'; import 'package:game_tracker/data/dto/player.dart'; import 'package:game_tracker/l10n/generated/app_localizations.dart'; +import 'package:game_tracker/presentation/views/main_menu/match_view/create_match/create_match_view.dart'; import 'package:game_tracker/presentation/views/main_menu/match_view/match_result_view.dart'; import 'package:game_tracker/presentation/widgets/buttons/animated_dialog_button.dart'; import 'package:game_tracker/presentation/widgets/buttons/main_menu_button.dart'; @@ -218,7 +219,17 @@ class _MatchProfileViewState extends State { bottom: MediaQuery.paddingOf(context).bottom, child: Row( children: [ - MainMenuButton(icon: Icons.edit, onPressed: () {}), + MainMenuButton( + icon: Icons.edit, + onPressed: () => Navigator.push( + context, + adaptivePageRoute( + fullscreenDialog: true, + builder: (context) => + CreateMatchView(match: widget.match), + ), + ), + ), const SizedBox(width: 15), MainMenuButton( text: loc.enter_results,