From 21437e6b0ea345278d88a31f9341c603cc0c969c Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 21:52:29 +0200 Subject: [PATCH 01/20] Removed unused strings --- lib/l10n/arb/app_de.arb | 3 +-- lib/l10n/arb/app_en.arb | 3 +-- lib/l10n/generated/app_localizations.dart | 12 +++--------- lib/l10n/generated/app_localizations_de.dart | 5 +---- lib/l10n/generated/app_localizations_en.dart | 6 +----- 5 files changed, 7 insertions(+), 22 deletions(-) diff --git a/lib/l10n/arb/app_de.arb b/lib/l10n/arb/app_de.arb index dceb8fc..8fb9c31 100644 --- a/lib/l10n/arb/app_de.arb +++ b/lib/l10n/arb/app_de.arb @@ -109,9 +109,8 @@ "settings": "Einstellungen", "cabo_penalty": "Cabo-Strafe", - "cabo_penalty_subtitle": "... für falsches Cabo sagen", "point_limit": "Punkte-Limit", - "point_limit_subtitle": "... hier ist Schluss", + "standard_mode": "Standard-Modus", "reset_to_default": "Auf Standard zurücksetzen", "game_data": "Spieldaten", "import_data": "Spieldaten importieren", diff --git a/lib/l10n/arb/app_en.arb b/lib/l10n/arb/app_en.arb index 3009d6e..47893bc 100644 --- a/lib/l10n/arb/app_en.arb +++ b/lib/l10n/arb/app_en.arb @@ -109,9 +109,8 @@ "settings": "Settings", "cabo_penalty": "Cabo Penalty", - "cabo_penalty_subtitle": "A point penalty for incorrectly calling Cabo.", "point_limit": "Point Limit", - "point_limit_subtitle": "The required score to win the game.", + "standard_mode": "Default Mode", "reset_to_default": "Reset to Default", "game_data": "Game Data", "import_data": "Import Data", diff --git a/lib/l10n/generated/app_localizations.dart b/lib/l10n/generated/app_localizations.dart index 695fb57..2e1b880 100644 --- a/lib/l10n/generated/app_localizations.dart +++ b/lib/l10n/generated/app_localizations.dart @@ -519,23 +519,17 @@ abstract class AppLocalizations { /// **'Cabo-Strafe'** String get cabo_penalty; - /// No description provided for @cabo_penalty_subtitle. - /// - /// In de, this message translates to: - /// **'... für falsches Cabo sagen'** - String get cabo_penalty_subtitle; - /// No description provided for @point_limit. /// /// In de, this message translates to: /// **'Punkte-Limit'** String get point_limit; - /// No description provided for @point_limit_subtitle. + /// No description provided for @standard_mode. /// /// In de, this message translates to: - /// **'... hier ist Schluss'** - String get point_limit_subtitle; + /// **'Standard-Modus'** + String get standard_mode; /// No description provided for @reset_to_default. /// diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart index 3ef54b8..43b68a7 100644 --- a/lib/l10n/generated/app_localizations_de.dart +++ b/lib/l10n/generated/app_localizations_de.dart @@ -243,14 +243,11 @@ class AppLocalizationsDe extends AppLocalizations { @override String get cabo_penalty => 'Cabo-Strafe'; - @override - String get cabo_penalty_subtitle => '... für falsches Cabo sagen'; - @override String get point_limit => 'Punkte-Limit'; @override - String get point_limit_subtitle => '... hier ist Schluss'; + String get standard_mode => 'Standard-Modus'; @override String get reset_to_default => 'Auf Standard zurücksetzen'; diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart index 8a86b95..b54cf3d 100644 --- a/lib/l10n/generated/app_localizations_en.dart +++ b/lib/l10n/generated/app_localizations_en.dart @@ -241,15 +241,11 @@ class AppLocalizationsEn extends AppLocalizations { @override String get cabo_penalty => 'Cabo Penalty'; - @override - String get cabo_penalty_subtitle => - 'A point penalty for incorrectly calling Cabo.'; - @override String get point_limit => 'Point Limit'; @override - String get point_limit_subtitle => 'The required score to win the game.'; + String get standard_mode => 'Default Mode'; @override String get reset_to_default => 'Reset to Default'; From 97b32b5173ff03b2407887966400bbcdfaff4f8f Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 21:52:37 +0200 Subject: [PATCH 02/20] Added gameMode --- lib/services/config_service.dart | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/services/config_service.dart b/lib/services/config_service.dart index 70f6133..02edc7d 100644 --- a/lib/services/config_service.dart +++ b/lib/services/config_service.dart @@ -6,12 +6,15 @@ import 'package:shared_preferences/shared_preferences.dart'; class ConfigService { static const String _keyPointLimit = 'pointLimit'; static const String _keyCaboPenalty = 'caboPenalty'; + static const String _keyGameMode = 'gameMode'; // Actual values used in the app static int pointLimit = 100; static int caboPenalty = 5; + static int gameMode = -1; // Default values static const int _defaultPointLimit = 100; static const int _defaultCaboPenalty = 5; + static const int _defaultGameMode = -1; static Future initConfig() async { final prefs = await SharedPreferences.getInstance(); @@ -21,6 +24,13 @@ class ConfigService { _keyPointLimit, prefs.getInt(_keyPointLimit) ?? _defaultPointLimit); prefs.setInt( _keyCaboPenalty, prefs.getInt(_keyCaboPenalty) ?? _defaultCaboPenalty); + prefs.setInt(_keyGameMode, prefs.getInt(_keyGameMode) ?? _defaultGameMode); + } + + static Future setGameMode(int newGameMode) async { + final prefs = await SharedPreferences.getInstance(); + await prefs.setInt(_keyGameMode, newGameMode); + gameMode = newGameMode; } /// Getter for the point limit. @@ -34,6 +44,7 @@ class ConfigService { static Future setPointLimit(int newPointLimit) async { final prefs = await SharedPreferences.getInstance(); await prefs.setInt(_keyPointLimit, newPointLimit); + pointLimit = newPointLimit; } /// Getter for the cabo penalty. @@ -47,6 +58,7 @@ class ConfigService { static Future setCaboPenalty(int newCaboPenalty) async { final prefs = await SharedPreferences.getInstance(); await prefs.setInt(_keyCaboPenalty, newCaboPenalty); + caboPenalty = newCaboPenalty; } /// Resets the configuration to default values. From 2690eac3eb2eca6493b850ba272e46cf0753f451 Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 21:52:47 +0200 Subject: [PATCH 03/20] Changed creation variable --- lib/presentation/views/create_game_view.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/presentation/views/create_game_view.dart b/lib/presentation/views/create_game_view.dart index 0d23494..fe3173d 100644 --- a/lib/presentation/views/create_game_view.dart +++ b/lib/presentation/views/create_game_view.dart @@ -117,6 +117,7 @@ class _CreateGameViewState extends State { CupertinoPageRoute( builder: (context) => ModeSelectionMenu( pointLimit: ConfigService.pointLimit, + showDeselection: false, ), ), ); From 482180d88e9d3a814987a7f503d56e3a40a3843e Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 21:52:56 +0200 Subject: [PATCH 04/20] Updated mode selection --- .../views/mode_selection_view.dart | 21 ++++++++++++++++++- pubspec.yaml | 2 +- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/presentation/views/mode_selection_view.dart b/lib/presentation/views/mode_selection_view.dart index a7d3ce7..8ce0119 100644 --- a/lib/presentation/views/mode_selection_view.dart +++ b/lib/presentation/views/mode_selection_view.dart @@ -4,7 +4,9 @@ import 'package:flutter/cupertino.dart'; class ModeSelectionMenu extends StatelessWidget { final int pointLimit; - const ModeSelectionMenu({super.key, required this.pointLimit}); + final bool showDeselection; + const ModeSelectionMenu( + {super.key, required this.pointLimit, required this.showDeselection}); @override Widget build(BuildContext context) { @@ -14,6 +16,23 @@ class ModeSelectionMenu extends StatelessWidget { ), child: ListView( children: [ + Visibility( + visible: showDeselection, + child: Padding( + padding: const EdgeInsets.fromLTRB(0, 16, 0, 0), + child: CupertinoListTile( + title: + Text('Kein Standardmodus', style: CustomTheme.modeTitle), + subtitle: const Text( + 'Dein Standardmodus wird zurückgesetzt.', + style: CustomTheme.modeDescription, + maxLines: 3, + ), + onTap: () { + Navigator.pop(context); + }, + ), + )), Padding( padding: const EdgeInsets.fromLTRB(0, 16, 0, 0), child: CupertinoListTile( diff --git a/pubspec.yaml b/pubspec.yaml index 37af518..623b5b9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: cabo_counter description: "Mobile app for the card game Cabo" publish_to: 'none' -version: 0.4.9+533 +version: 0.4.9+537 environment: sdk: ^3.5.4 From 499c0c6dfd542b350af9b94b98320fee958e6ee7 Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 22:17:11 +0200 Subject: [PATCH 05/20] Updated strings --- lib/l10n/arb/app_de.arb | 3 +++ lib/l10n/arb/app_en.arb | 3 +++ lib/l10n/generated/app_localizations.dart | 18 ++++++++++++++++++ lib/l10n/generated/app_localizations_de.dart | 9 +++++++++ lib/l10n/generated/app_localizations_en.dart | 9 +++++++++ 5 files changed, 42 insertions(+) diff --git a/lib/l10n/arb/app_de.arb b/lib/l10n/arb/app_de.arb index 8fb9c31..c68424c 100644 --- a/lib/l10n/arb/app_de.arb +++ b/lib/l10n/arb/app_de.arb @@ -58,6 +58,9 @@ "no_name_message": "Jeder Spieler muss einen Namen haben.", "select_game_mode": "Spielmodus auswählen", + "no_mode_selected": "Kein Modus ausgewählt", + "no_default_mode": "Kein Standard-Modus", + "no_default_description" : "Der Standard-Modus wird zurückgesetzt.", "point_limit_description": "Es wird so lange gespielt, bis ein:e Spieler:in mehr als {pointLimit} Punkte erreicht", "@point_limit_description": { "placeholders": { diff --git a/lib/l10n/arb/app_en.arb b/lib/l10n/arb/app_en.arb index 47893bc..946ac74 100644 --- a/lib/l10n/arb/app_en.arb +++ b/lib/l10n/arb/app_en.arb @@ -58,6 +58,9 @@ "no_name_message": "Each player must have a name.", "select_game_mode": "Select game mode", + "no_mode_selected": "No mode selected", + "no_default_mode": "No default mode", + "no_default_description" : "The default mode gets resetted.", "point_limit_description": "The game ends when a player scores more than {pointLimit} points.", "@point_limit_description": { "placeholders": { diff --git a/lib/l10n/generated/app_localizations.dart b/lib/l10n/generated/app_localizations.dart index 2e1b880..cc4eb12 100644 --- a/lib/l10n/generated/app_localizations.dart +++ b/lib/l10n/generated/app_localizations.dart @@ -374,6 +374,24 @@ abstract class AppLocalizations { /// **'Spielmodus auswählen'** String get select_game_mode; + /// No description provided for @no_mode_selected. + /// + /// In de, this message translates to: + /// **'Kein Modus ausgewählt'** + String get no_mode_selected; + + /// No description provided for @no_default_mode. + /// + /// In de, this message translates to: + /// **'Kein Standard-Modus'** + String get no_default_mode; + + /// No description provided for @no_default_description. + /// + /// In de, this message translates to: + /// **'Der Standard-Modus wird zurückgesetzt.'** + String get no_default_description; + /// No description provided for @point_limit_description. /// /// In de, this message translates to: diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart index 43b68a7..3820070 100644 --- a/lib/l10n/generated/app_localizations_de.dart +++ b/lib/l10n/generated/app_localizations_de.dart @@ -154,6 +154,15 @@ class AppLocalizationsDe extends AppLocalizations { @override String get select_game_mode => 'Spielmodus auswählen'; + @override + String get no_mode_selected => 'Kein Modus ausgewählt'; + + @override + String get no_default_mode => 'Kein Standard-Modus'; + + @override + String get no_default_description => 'Der Standard-Modus wird zurückgesetzt.'; + @override String point_limit_description(int pointLimit) { return 'Es wird so lange gespielt, bis ein:e Spieler:in mehr als $pointLimit Punkte erreicht'; diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart index b54cf3d..1344f96 100644 --- a/lib/l10n/generated/app_localizations_en.dart +++ b/lib/l10n/generated/app_localizations_en.dart @@ -152,6 +152,15 @@ class AppLocalizationsEn extends AppLocalizations { @override String get select_game_mode => 'Select game mode'; + @override + String get no_mode_selected => 'No mode selected'; + + @override + String get no_default_mode => 'No default mode'; + + @override + String get no_default_description => 'The default mode gets resetted.'; + @override String point_limit_description(int pointLimit) { return 'The game ends when a player scores more than $pointLimit points.'; From 98912d516427f8b2ad7d9ee9046068af06cb450a Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 22:17:28 +0200 Subject: [PATCH 06/20] Changed mode order --- .../views/mode_selection_view.dart | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/lib/presentation/views/mode_selection_view.dart b/lib/presentation/views/mode_selection_view.dart index 8ce0119..0424dab 100644 --- a/lib/presentation/views/mode_selection_view.dart +++ b/lib/presentation/views/mode_selection_view.dart @@ -2,6 +2,12 @@ import 'package:cabo_counter/core/custom_theme.dart'; import 'package:cabo_counter/l10n/generated/app_localizations.dart'; import 'package:flutter/cupertino.dart'; +enum GameMode { + none, + pointLimit, + unlimited, +} + class ModeSelectionMenu extends StatelessWidget { final int pointLimit; final bool showDeselection; @@ -16,23 +22,6 @@ class ModeSelectionMenu extends StatelessWidget { ), child: ListView( children: [ - Visibility( - visible: showDeselection, - child: Padding( - padding: const EdgeInsets.fromLTRB(0, 16, 0, 0), - child: CupertinoListTile( - title: - Text('Kein Standardmodus', style: CustomTheme.modeTitle), - subtitle: const Text( - 'Dein Standardmodus wird zurückgesetzt.', - style: CustomTheme.modeDescription, - maxLines: 3, - ), - onTap: () { - Navigator.pop(context); - }, - ), - )), Padding( padding: const EdgeInsets.fromLTRB(0, 16, 0, 0), child: CupertinoListTile( @@ -45,12 +34,12 @@ class ModeSelectionMenu extends StatelessWidget { maxLines: 3, ), onTap: () { - Navigator.pop(context, true); + Navigator.pop(context, GameMode.pointLimit); }, ), ), Padding( - padding: const EdgeInsets.symmetric(vertical: 16.0), + padding: const EdgeInsets.fromLTRB(0, 16, 0, 0), child: CupertinoListTile( title: Text(AppLocalizations.of(context).unlimited, style: CustomTheme.modeTitle), @@ -60,10 +49,27 @@ class ModeSelectionMenu extends StatelessWidget { maxLines: 3, ), onTap: () { - Navigator.pop(context, false); + Navigator.pop(context, GameMode.unlimited); }, ), ), + Visibility( + visible: showDeselection, + child: Padding( + padding: const EdgeInsets.fromLTRB(0, 16, 0, 0), + child: CupertinoListTile( + title: Text(AppLocalizations.of(context).no_default_mode, + style: CustomTheme.modeTitle), + subtitle: Text( + AppLocalizations.of(context).no_default_description, + style: CustomTheme.modeDescription, + maxLines: 3, + ), + onTap: () { + Navigator.pop(context, GameMode.none); + }, + ), + )), ], ), ); From 2e1c5392a09845a66ea72b484697a5281a10ac27 Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 22:17:41 +0200 Subject: [PATCH 07/20] Implemented default mode selection --- lib/presentation/views/settings_view.dart | 52 +++++++++++++++++++++++ pubspec.yaml | 2 +- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/lib/presentation/views/settings_view.dart b/lib/presentation/views/settings_view.dart index d6f0833..7247073 100644 --- a/lib/presentation/views/settings_view.dart +++ b/lib/presentation/views/settings_view.dart @@ -1,6 +1,7 @@ import 'package:cabo_counter/core/constants.dart'; import 'package:cabo_counter/core/custom_theme.dart'; import 'package:cabo_counter/l10n/generated/app_localizations.dart'; +import 'package:cabo_counter/presentation/views/mode_selection_view.dart'; import 'package:cabo_counter/presentation/widgets/custom_form_row.dart'; import 'package:cabo_counter/presentation/widgets/custom_stepper.dart'; import 'package:cabo_counter/services/config_service.dart'; @@ -20,6 +21,7 @@ class SettingsView extends StatefulWidget { class _SettingsViewState extends State { UniqueKey _stepperKey1 = UniqueKey(); UniqueKey _stepperKey2 = UniqueKey(); + int defaultMode = ConfigService.gameMode; @override void initState() { super.initState(); @@ -84,6 +86,56 @@ class _SettingsViewState extends State { }, ), ), + CustomFormRow( + prefixText: AppLocalizations.of(context).standard_mode, + prefixIcon: CupertinoIcons.airplane, + suffixWidget: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Text( + defaultMode == -1 + ? AppLocalizations.of(context) + .no_mode_selected + : (defaultMode == 1 + ? '${ConfigService.pointLimit} ${AppLocalizations.of(context).points}' + : AppLocalizations.of(context).unlimited), + ), + const SizedBox(width: 10), + const CupertinoListTileChevron() + ], + ), + onPressed: () async { + final selectedMode = await Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => ModeSelectionMenu( + pointLimit: ConfigService.pointLimit, + showDeselection: true, + ), + ), + ); + print('Selected mode: $selectedMode'); + + switch (selectedMode) { + case GameMode.pointLimit: + setState(() { + defaultMode = 1; + }); + break; + case GameMode.unlimited: + setState(() { + defaultMode = 0; + }); + break; + case GameMode.none: + default: + setState(() { + defaultMode = -1; + }); + } + ConfigService.setGameMode(defaultMode); + }, + ), CustomFormRow( prefixText: AppLocalizations.of(context).reset_to_default, diff --git a/pubspec.yaml b/pubspec.yaml index 623b5b9..13a8959 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: cabo_counter description: "Mobile app for the card game Cabo" publish_to: 'none' -version: 0.4.9+537 +version: 0.4.9+539 environment: sdk: ^3.5.4 From 193b66b175490f91ed798c7902a047139d10d22b Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 22:17:48 +0200 Subject: [PATCH 08/20] Updated initState --- lib/presentation/views/create_game_view.dart | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/presentation/views/create_game_view.dart b/lib/presentation/views/create_game_view.dart index fe3173d..ab9aabb 100644 --- a/lib/presentation/views/create_game_view.dart +++ b/lib/presentation/views/create_game_view.dart @@ -48,8 +48,15 @@ class _CreateGameViewState extends State { @override void initState() { super.initState(); + print('pointLimit: $_isPointsLimitEnabled'); + + if (widget.isPointsLimitEnabled == null) { + _isPointsLimitEnabled = + ConfigService.gameMode == -1 ? null : ConfigService.gameMode == 1; + } else { + _isPointsLimitEnabled = widget.isPointsLimitEnabled; + } - _isPointsLimitEnabled = widget.isPointsLimitEnabled; _gameTitleTextController.text = widget.gameTitle ?? ''; if (widget.players != null) { @@ -91,7 +98,6 @@ class _CreateGameViewState extends State { controller: _gameTitleTextController, ), ), - // Spielmodus-Auswahl mit Chevron Padding( padding: const EdgeInsets.fromLTRB(15, 10, 10, 0), child: CupertinoTextField( From 1a2a9b5df1a345a0ebb83ba5686db356efde16f8 Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 22:20:59 +0200 Subject: [PATCH 09/20] Removed print --- lib/presentation/views/create_game_view.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/presentation/views/create_game_view.dart b/lib/presentation/views/create_game_view.dart index ab9aabb..7928c4d 100644 --- a/lib/presentation/views/create_game_view.dart +++ b/lib/presentation/views/create_game_view.dart @@ -48,7 +48,6 @@ class _CreateGameViewState extends State { @override void initState() { super.initState(); - print('pointLimit: $_isPointsLimitEnabled'); if (widget.isPointsLimitEnabled == null) { _isPointsLimitEnabled = From a6ab7f76b0443b0487efba27a9476573670eb057 Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 22:21:20 +0200 Subject: [PATCH 10/20] Removed print --- lib/presentation/views/settings_view.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/presentation/views/settings_view.dart b/lib/presentation/views/settings_view.dart index 7247073..b08abf6 100644 --- a/lib/presentation/views/settings_view.dart +++ b/lib/presentation/views/settings_view.dart @@ -114,7 +114,6 @@ class _SettingsViewState extends State { ), ), ); - print('Selected mode: $selectedMode'); switch (selectedMode) { case GameMode.pointLimit: From 1935dc488cc49103570d53eb8f589f60cc2dcc5b Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 22:25:30 +0200 Subject: [PATCH 11/20] Removed comments --- lib/presentation/views/create_game_view.dart | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/presentation/views/create_game_view.dart b/lib/presentation/views/create_game_view.dart index 7928c4d..563eb45 100644 --- a/lib/presentation/views/create_game_view.dart +++ b/lib/presentation/views/create_game_view.dart @@ -144,11 +144,9 @@ class _CreateGameViewState extends State { ), Expanded( child: ListView.builder( - itemCount: _playerNameTextControllers.length + - 1, // +1 für den + Button + itemCount: _playerNameTextControllers.length + 1, itemBuilder: (context, index) { if (index == _playerNameTextControllers.length) { - // + Button als letztes Element return Padding( padding: const EdgeInsets.symmetric(vertical: 8.0), child: CupertinoButton( From e9fe7262ab0c4a01f0cf3db72a03775eddb18292 Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 22:30:16 +0200 Subject: [PATCH 12/20] Updated config service --- lib/services/config_service.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/services/config_service.dart b/lib/services/config_service.dart index 02edc7d..2b463f5 100644 --- a/lib/services/config_service.dart +++ b/lib/services/config_service.dart @@ -25,6 +25,10 @@ class ConfigService { prefs.setInt( _keyCaboPenalty, prefs.getInt(_keyCaboPenalty) ?? _defaultCaboPenalty); prefs.setInt(_keyGameMode, prefs.getInt(_keyGameMode) ?? _defaultGameMode); + + pointLimit = prefs.getInt(_keyPointLimit) ?? _defaultPointLimit; + caboPenalty = prefs.getInt(_keyCaboPenalty) ?? _defaultCaboPenalty; + gameMode = prefs.getInt(_keyGameMode) ?? _defaultGameMode; } static Future setGameMode(int newGameMode) async { From cfa93b6917501625a2fbd532f531f450ffe2fa06 Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 22:30:29 +0200 Subject: [PATCH 13/20] Changed create game view --- lib/presentation/views/create_game_view.dart | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/presentation/views/create_game_view.dart b/lib/presentation/views/create_game_view.dart index 563eb45..cdda7f9 100644 --- a/lib/presentation/views/create_game_view.dart +++ b/lib/presentation/views/create_game_view.dart @@ -127,10 +127,22 @@ class _CreateGameViewState extends State { ), ); - if (selectedMode != null) { - setState(() { - _isPointsLimitEnabled = selectedMode; - }); + switch (selectedMode) { + case GameMode.pointLimit: + setState(() { + _isPointsLimitEnabled = null; + }); + break; + case GameMode.unlimited: + setState(() { + _isPointsLimitEnabled = false; + }); + break; + case GameMode.none: + default: + setState(() { + _isPointsLimitEnabled = true; + }); } }, ), From aec3905c551cca62219f888d75b84ee0915b3973 Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 22:34:43 +0200 Subject: [PATCH 14/20] Changed icon --- lib/presentation/views/settings_view.dart | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/presentation/views/settings_view.dart b/lib/presentation/views/settings_view.dart index b08abf6..67b2fa0 100644 --- a/lib/presentation/views/settings_view.dart +++ b/lib/presentation/views/settings_view.dart @@ -64,7 +64,6 @@ class _SettingsViewState extends State { onChanged: (newCaboPenalty) { setState(() { ConfigService.setCaboPenalty(newCaboPenalty); - ConfigService.caboPenalty = newCaboPenalty; }); }, ), @@ -81,14 +80,13 @@ class _SettingsViewState extends State { onChanged: (newPointLimit) { setState(() { ConfigService.setPointLimit(newPointLimit); - ConfigService.pointLimit = newPointLimit; }); }, ), ), CustomFormRow( prefixText: AppLocalizations.of(context).standard_mode, - prefixIcon: CupertinoIcons.airplane, + prefixIcon: CupertinoIcons.square_stack, suffixWidget: Row( mainAxisAlignment: MainAxisAlignment.end, children: [ From 7b8f49c1a486e2256a69831982eaad79fa0b8534 Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 22:36:14 +0200 Subject: [PATCH 15/20] Updated strings --- lib/l10n/arb/app_de.arb | 2 +- lib/l10n/arb/app_en.arb | 2 +- lib/l10n/generated/app_localizations_en.dart | 2 +- pubspec.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/l10n/arb/app_de.arb b/lib/l10n/arb/app_de.arb index c68424c..3c157ad 100644 --- a/lib/l10n/arb/app_de.arb +++ b/lib/l10n/arb/app_de.arb @@ -60,7 +60,7 @@ "select_game_mode": "Spielmodus auswählen", "no_mode_selected": "Kein Modus ausgewählt", "no_default_mode": "Kein Standard-Modus", - "no_default_description" : "Der Standard-Modus wird zurückgesetzt.", + "no_default_description": "Der Standard-Modus wird zurückgesetzt.", "point_limit_description": "Es wird so lange gespielt, bis ein:e Spieler:in mehr als {pointLimit} Punkte erreicht", "@point_limit_description": { "placeholders": { diff --git a/lib/l10n/arb/app_en.arb b/lib/l10n/arb/app_en.arb index 946ac74..ea169e9 100644 --- a/lib/l10n/arb/app_en.arb +++ b/lib/l10n/arb/app_en.arb @@ -60,7 +60,7 @@ "select_game_mode": "Select game mode", "no_mode_selected": "No mode selected", "no_default_mode": "No default mode", - "no_default_description" : "The default mode gets resetted.", + "no_default_description": "The default mode gets reset.", "point_limit_description": "The game ends when a player scores more than {pointLimit} points.", "@point_limit_description": { "placeholders": { diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart index 1344f96..6b2689e 100644 --- a/lib/l10n/generated/app_localizations_en.dart +++ b/lib/l10n/generated/app_localizations_en.dart @@ -159,7 +159,7 @@ class AppLocalizationsEn extends AppLocalizations { String get no_default_mode => 'No default mode'; @override - String get no_default_description => 'The default mode gets resetted.'; + String get no_default_description => 'The default mode gets reset.'; @override String point_limit_description(int pointLimit) { diff --git a/pubspec.yaml b/pubspec.yaml index 13a8959..dca4d3a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: cabo_counter description: "Mobile app for the card game Cabo" publish_to: 'none' -version: 0.4.9+539 +version: 0.4.9+540 environment: sdk: ^3.5.4 From 38213921afcc87129f97ac4353fa62f223f41db5 Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 22:44:47 +0200 Subject: [PATCH 16/20] Updated config --- lib/services/config_service.dart | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/services/config_service.dart b/lib/services/config_service.dart index 2b463f5..108b210 100644 --- a/lib/services/config_service.dart +++ b/lib/services/config_service.dart @@ -19,16 +19,16 @@ class ConfigService { static Future initConfig() async { final prefs = await SharedPreferences.getInstance(); - // Default values only set if they are not already set - prefs.setInt( - _keyPointLimit, prefs.getInt(_keyPointLimit) ?? _defaultPointLimit); - prefs.setInt( - _keyCaboPenalty, prefs.getInt(_keyCaboPenalty) ?? _defaultCaboPenalty); - prefs.setInt(_keyGameMode, prefs.getInt(_keyGameMode) ?? _defaultGameMode); - + // Initialize pointLimit, caboPenalty, and gameMode from SharedPreferences + // If they are not set, use the default values pointLimit = prefs.getInt(_keyPointLimit) ?? _defaultPointLimit; caboPenalty = prefs.getInt(_keyCaboPenalty) ?? _defaultCaboPenalty; gameMode = prefs.getInt(_keyGameMode) ?? _defaultGameMode; + + // Save the initial values to SharedPreferences + prefs.setInt(_keyPointLimit, pointLimit); + prefs.setInt(_keyCaboPenalty, caboPenalty); + prefs.setInt(_keyGameMode, gameMode); } static Future setGameMode(int newGameMode) async { From c31a3200e9905ec5a2edbbf80d10b262514194c8 Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 22:45:52 +0200 Subject: [PATCH 17/20] Updated mode selection logic --- lib/presentation/views/create_game_view.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/presentation/views/create_game_view.dart b/lib/presentation/views/create_game_view.dart index cdda7f9..2634788 100644 --- a/lib/presentation/views/create_game_view.dart +++ b/lib/presentation/views/create_game_view.dart @@ -130,7 +130,7 @@ class _CreateGameViewState extends State { switch (selectedMode) { case GameMode.pointLimit: setState(() { - _isPointsLimitEnabled = null; + _isPointsLimitEnabled = true; }); break; case GameMode.unlimited: @@ -141,7 +141,7 @@ class _CreateGameViewState extends State { case GameMode.none: default: setState(() { - _isPointsLimitEnabled = true; + _isPointsLimitEnabled = null; }); } }, From ac1851d501666dc2317e4894e21b49639c332836 Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 22:53:13 +0200 Subject: [PATCH 18/20] Deleted getter --- lib/services/config_service.dart | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/lib/services/config_service.dart b/lib/services/config_service.dart index 108b210..a360fe4 100644 --- a/lib/services/config_service.dart +++ b/lib/services/config_service.dart @@ -37,12 +37,6 @@ class ConfigService { gameMode = newGameMode; } - /// Getter for the point limit. - static Future getPointLimit() async { - final prefs = await SharedPreferences.getInstance(); - return prefs.getInt(_keyPointLimit) ?? _defaultPointLimit; - } - /// Setter for the point limit. /// [newPointLimit] is the new point limit to be set. static Future setPointLimit(int newPointLimit) async { @@ -51,12 +45,6 @@ class ConfigService { pointLimit = newPointLimit; } - /// Getter for the cabo penalty. - static Future getCaboPenalty() async { - final prefs = await SharedPreferences.getInstance(); - return prefs.getInt(_keyCaboPenalty) ?? _defaultCaboPenalty; - } - /// Setter for the cabo penalty. /// [newCaboPenalty] is the new cabo penalty to be set. static Future setCaboPenalty(int newCaboPenalty) async { @@ -69,6 +57,7 @@ class ConfigService { static Future resetConfig() async { ConfigService.pointLimit = _defaultPointLimit; ConfigService.caboPenalty = _defaultCaboPenalty; + ConfigService.gameMode = _defaultGameMode; final prefs = await SharedPreferences.getInstance(); await prefs.setInt(_keyPointLimit, _defaultPointLimit); await prefs.setInt(_keyCaboPenalty, _defaultCaboPenalty); From 7789c05174e5030eda05f35f9c41dd9864053717 Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 22:53:22 +0200 Subject: [PATCH 19/20] Removed not used code --- lib/main.dart | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 9279426..8b45434 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -12,8 +12,6 @@ Future main() async { await SystemChrome.setPreferredOrientations( [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]); await ConfigService.initConfig(); - ConfigService.pointLimit = await ConfigService.getPointLimit(); - ConfigService.caboPenalty = await ConfigService.getCaboPenalty(); await VersionService.init(); runApp(const App()); } From 9c797e1e5eba42e1135a1f99e460341b5464211d Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Sat, 19 Jul 2025 22:53:32 +0200 Subject: [PATCH 20/20] Implemented reset logic for default game mode --- lib/presentation/views/settings_view.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/presentation/views/settings_view.dart b/lib/presentation/views/settings_view.dart index 67b2fa0..c649a20 100644 --- a/lib/presentation/views/settings_view.dart +++ b/lib/presentation/views/settings_view.dart @@ -142,6 +142,7 @@ class _SettingsViewState extends State { setState(() { _stepperKey1 = UniqueKey(); _stepperKey2 = UniqueKey(); + defaultMode = ConfigService.gameMode; }); }, )