From 765610b184227e8860db35b210f57b3e63208fff Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sun, 18 Jan 2026 01:02:35 +0100 Subject: [PATCH] Enhanced editing --- lib/l10n/arb/app_de.arb | 1 + lib/l10n/arb/app_en.arb | 10 +++- lib/l10n/generated/app_localizations.dart | 6 ++ lib/l10n/generated/app_localizations_de.dart | 3 + lib/l10n/generated/app_localizations_en.dart | 3 + .../create_match/create_match_view.dart | 60 ++++++++++++------- 6 files changed, 57 insertions(+), 26 deletions(-) diff --git a/lib/l10n/arb/app_de.arb b/lib/l10n/arb/app_de.arb index fa976b5..5a554c5 100644 --- a/lib/l10n/arb/app_de.arb +++ b/lib/l10n/arb/app_de.arb @@ -81,6 +81,7 @@ "ruleset_most_points": "Traditionelles Regelwerk: Der/die Spieler:in mit den meisten Punkten gewinnt.", "ruleset_single_loser": "Genau ein:e Verlierer:in wird bestimmt; der letzte Platz erhält die Strafe oder Konsequenz.", "ruleset_single_winner": "Genau ein:e Gewinner:in wird gewählt; Unentschieden werden durch einen vordefinierten Tie-Breaker aufgelöst.", + "save_changes": "Änderungen speichern", "search_for_groups": "Nach Gruppen suchen", "search_for_players": "Nach Spieler:innen suchen", "select_winner": "Gewinner:in wählen:", diff --git a/lib/l10n/arb/app_en.arb b/lib/l10n/arb/app_en.arb index c5ea0fc..c818920 100644 --- a/lib/l10n/arb/app_en.arb +++ b/lib/l10n/arb/app_en.arb @@ -188,9 +188,9 @@ "@no_recent_matches_available": { "description": "Message when no recent matches exist" }, - "@no_results_entered_yet": { - "description": "Message when no results have been entered yet" - }, + "@no_results_entered_yet": { + "description": "Message when no results have been entered yet" + }, "@no_second_match_available": { "description": "Message when no second match exists" }, @@ -250,6 +250,9 @@ "@ruleset_single_winner": { "description": "Description for single winner ruleset" }, + "@save_changes": { + "description": "Save changes button text" + }, "@search_for_groups": { "description": "Hint text for group search input field" }, @@ -393,6 +396,7 @@ "ruleset_most_points": "Traditional ruleset: the player with the most points wins.", "ruleset_single_loser": "Exactly one loser is determined; last place receives the penalty or consequence.", "ruleset_single_winner": "Exactly one winner is chosen; ties are resolved by a predefined tiebreaker.", + "save_changes": "Save Changes", "search_for_groups": "Search for groups", "search_for_players": "Search for players", "select_winner": "Select Winner:", diff --git a/lib/l10n/generated/app_localizations.dart b/lib/l10n/generated/app_localizations.dart index ad62957..49c2e20 100644 --- a/lib/l10n/generated/app_localizations.dart +++ b/lib/l10n/generated/app_localizations.dart @@ -578,6 +578,12 @@ abstract class AppLocalizations { /// **'Exactly one winner is chosen; ties are resolved by a predefined tiebreaker.'** String get ruleset_single_winner; + /// Save changes button text + /// + /// In en, this message translates to: + /// **'Save Changes'** + String get save_changes; + /// Hint text for group search input field /// /// In en, this message translates to: diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart index d78f926..8259aa5 100644 --- a/lib/l10n/generated/app_localizations_de.dart +++ b/lib/l10n/generated/app_localizations_de.dart @@ -260,6 +260,9 @@ class AppLocalizationsDe extends AppLocalizations { String get ruleset_single_winner => 'Genau ein:e Gewinner:in wird gewählt; Unentschieden werden durch einen vordefinierten Tie-Breaker aufgelöst.'; + @override + String get save_changes => 'Änderungen speichern'; + @override String get search_for_groups => 'Nach Gruppen suchen'; diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart index 0dad111..b66b293 100644 --- a/lib/l10n/generated/app_localizations_en.dart +++ b/lib/l10n/generated/app_localizations_en.dart @@ -260,6 +260,9 @@ class AppLocalizationsEn extends AppLocalizations { String get ruleset_single_winner => 'Exactly one winner is chosen; ties are resolved by a predefined tiebreaker.'; + @override + String get save_changes => 'Save Changes'; + @override String get search_for_groups => 'Search for groups'; 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 a66178e..fa685c3 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 @@ -87,6 +87,7 @@ class _CreateMatchViewState extends State { }); }); + // If a match is provided, prefill the fields if (widget.match != null) { final match = widget.match!; _matchNameController.text = match.name; @@ -122,6 +123,10 @@ class _CreateMatchViewState extends State { @override Widget build(BuildContext context) { final loc = AppLocalizations.of(context); + final buttonText = widget.match != null + ? loc.save_changes + : loc.create_match; + return ScaffoldMessenger( child: Scaffold( backgroundColor: CustomTheme.backgroundColor, @@ -202,32 +207,12 @@ class _CreateMatchViewState extends State { ), ), CustomWidthButton( - text: loc.create_match, + text: buttonText, sizeRelativeToWidth: 0.95, buttonType: ButtonType.primary, onPressed: _enableCreateGameButton() - ? () async { - Match match = Match( - name: _matchNameController.text.isEmpty - ? (hintText ?? '') - : _matchNameController.text.trim(), - createdAt: DateTime.now(), - group: selectedGroup, - players: selectedPlayers, - ); - await db.matchDao.addMatch(match: match); - if (context.mounted) { - Navigator.pushReplacement( - context, - adaptivePageRoute( - fullscreenDialog: true, - builder: (context) => MatchResultView( - match: match, - onWinnerChanged: widget.onWinnerChanged, - ), - ), - ); - } + ? () { + buttonNavigation(context); } : null, ), @@ -247,4 +232,33 @@ class _CreateMatchViewState extends State { return (selectedGroup != null || (selectedPlayers != null && selectedPlayers!.length > 1)); } + + void buttonNavigation(BuildContext context) async { + if (widget.match != null) { + // TODO: Implement updating match logic here + Navigator.pop(context); + } else { + Match match = Match( + name: _matchNameController.text.isEmpty + ? (hintText ?? '') + : _matchNameController.text.trim(), + createdAt: DateTime.now(), + group: selectedGroup, + players: selectedPlayers, + ); + await db.matchDao.addMatch(match: match); + if (context.mounted) { + Navigator.pushReplacement( + context, + adaptivePageRoute( + fullscreenDialog: true, + builder: (context) => MatchResultView( + match: match, + onWinnerChanged: widget.onWinnerChanged, + ), + ), + ); + } + } + } }