From d6413c096d4ec2132ff59efe7a01db4e9983ad58 Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Wed, 2 Jul 2025 16:30:29 +0200 Subject: [PATCH 1/4] Implemented new game same settings features --- lib/views/active_game_view.dart | 25 +++++++++++++++++------ lib/views/create_game_view.dart | 36 ++++++++++++++++++++++++++------- lib/views/main_menu_view.dart | 5 +++-- pubspec.yaml | 2 +- 4 files changed, 52 insertions(+), 16 deletions(-) diff --git a/lib/views/active_game_view.dart b/lib/views/active_game_view.dart index 6266348..d4ff7bd 100644 --- a/lib/views/active_game_view.dart +++ b/lib/views/active_game_view.dart @@ -1,6 +1,7 @@ import 'package:cabo_counter/data/game_session.dart'; import 'package:cabo_counter/l10n/app_localizations.dart'; import 'package:cabo_counter/utility/custom_theme.dart'; +import 'package:cabo_counter/views/create_game_view.dart'; import 'package:cabo_counter/views/graph_view.dart'; import 'package:cabo_counter/views/round_view.dart'; import 'package:flutter/cupertino.dart'; @@ -141,12 +142,24 @@ class _ActiveGameViewState extends State { onTap: () {}, ), CupertinoListTile( - title: Text( - AppLocalizations.of(context) - .new_game_same_settings, - style: const TextStyle( - color: Colors.white30, - ))), + title: Text( + AppLocalizations.of(context) + .new_game_same_settings, + ), + onTap: () { + Navigator.pushReplacement( + context, + CupertinoPageRoute( + builder: (_) => CreateGameView( + gameTitle: + widget.gameSession.gameTitle, + isPointsLimitEnabled: widget + .gameSession + .isPointsLimitEnabled, + players: widget.gameSession.players, + ))); + }, + ), CupertinoListTile( title: Text(AppLocalizations.of(context).export_game, diff --git a/lib/views/create_game_view.dart b/lib/views/create_game_view.dart index adcbf86..70c65b4 100644 --- a/lib/views/create_game_view.dart +++ b/lib/views/create_game_view.dart @@ -7,18 +7,25 @@ import 'package:cabo_counter/views/active_game_view.dart'; import 'package:cabo_counter/views/mode_selection_view.dart'; import 'package:flutter/cupertino.dart'; -class CreateGame extends StatefulWidget { - const CreateGame({super.key}); +class CreateGameView extends StatefulWidget { + final String? gameTitle; + final bool? isPointsLimitEnabled; + final List? players; + + const CreateGameView({ + super.key, + this.gameTitle, + this.isPointsLimitEnabled, + this.players, + }); @override // ignore: library_private_types_in_public_api - _CreateGameState createState() => _CreateGameState(); + _CreateGameViewState createState() => _CreateGameViewState(); } -class _CreateGameState extends State { - final List _playerNameTextControllers = [ - TextEditingController() - ]; +class _CreateGameViewState extends State { + late List _playerNameTextControllers = []; final TextEditingController _gameTitleTextController = TextEditingController(); @@ -28,6 +35,21 @@ class _CreateGameState extends State { /// Variable to store the selected game mode. bool? selectedMode; + @override + void initState() { + selectedMode = widget.isPointsLimitEnabled; + _gameTitleTextController.text = widget.gameTitle ?? ''; + if (widget.players != null) { + _playerNameTextControllers = []; + for (var player in widget.players!) { + _playerNameTextControllers.add(TextEditingController(text: player)); + } + } else { + _playerNameTextControllers = [TextEditingController()]; + } + super.initState(); + } + @override Widget build(BuildContext context) { return CupertinoPageScaffold( diff --git a/lib/views/main_menu_view.dart b/lib/views/main_menu_view.dart index ab52d4e..f41a0ef 100644 --- a/lib/views/main_menu_view.dart +++ b/lib/views/main_menu_view.dart @@ -61,7 +61,7 @@ class _MainMenuViewState extends State { Navigator.push( context, CupertinoPageRoute( - builder: (context) => const CreateGame(), + builder: (context) => const CreateGameView(), ), ) }, @@ -82,7 +82,8 @@ class _MainMenuViewState extends State { onTap: () => Navigator.push( context, CupertinoPageRoute( - builder: (context) => const CreateGame(), + builder: (context) => + const CreateGameView(), ), ), child: Icon( diff --git a/pubspec.yaml b/pubspec.yaml index af1107f..a7c91ae 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.3.4+267 +version: 0.3.5+269 environment: sdk: ^3.5.4 From 8d411fcdb23c76f2c6690fcc412b3f9ab15556ce Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Wed, 2 Jul 2025 17:15:23 +0200 Subject: [PATCH 2/4] Refactoring & dispose updated --- lib/views/create_game_view.dart | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/lib/views/create_game_view.dart b/lib/views/create_game_view.dart index 70c65b4..609e9b0 100644 --- a/lib/views/create_game_view.dart +++ b/lib/views/create_game_view.dart @@ -33,11 +33,11 @@ class _CreateGameViewState extends State { final int maxPlayers = 5; /// Variable to store the selected game mode. - bool? selectedMode; + bool? _isPointsLimitEnabled; @override void initState() { - selectedMode = widget.isPointsLimitEnabled; + _isPointsLimitEnabled = widget.isPointsLimitEnabled; _gameTitleTextController.text = widget.gameTitle ?? ''; if (widget.players != null) { _playerNameTextControllers = []; @@ -91,9 +91,9 @@ class _CreateGameViewState extends State { suffix: Row( children: [ Text( - selectedMode == null + _isPointsLimitEnabled == null ? AppLocalizations.of(context).select_mode - : (selectedMode! + : (_isPointsLimitEnabled! ? '${Globals.pointLimit} ${AppLocalizations.of(context).points}' : AppLocalizations.of(context).unlimited), ), @@ -102,7 +102,7 @@ class _CreateGameViewState extends State { ], ), onTap: () async { - final selected = await Navigator.push( + final selectedMode = await Navigator.push( context, CupertinoPageRoute( builder: (context) => ModeSelectionMenu( @@ -111,9 +111,9 @@ class _CreateGameViewState extends State { ), ); - if (selected != null) { + if (selectedMode != null) { setState(() { - selectedMode = selected; + _isPointsLimitEnabled = selectedMode; }); } }, @@ -252,7 +252,7 @@ class _CreateGameViewState extends State { ); return; } - if (selectedMode == null) { + if (_isPointsLimitEnabled == null) { showCupertinoDialog( context: context, builder: (context) => CupertinoAlertDialog( @@ -315,7 +315,7 @@ class _CreateGameViewState extends State { players: players, pointLimit: Globals.pointLimit, caboPenalty: Globals.caboPenalty, - isPointsLimitEnabled: selectedMode!, + isPointsLimitEnabled: _isPointsLimitEnabled!, ); final index = await gameManager.addGameSession(gameSession); if (context.mounted) { @@ -343,6 +343,7 @@ class _CreateGameViewState extends State { @override void dispose() { + _gameTitleTextController.dispose(); for (var controller in _playerNameTextControllers) { controller.dispose(); } From 694fa3394bbca66f3d6a79811632b2da07afa00d Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Wed, 2 Jul 2025 17:20:02 +0200 Subject: [PATCH 3/4] Removed unnessecary code --- lib/views/create_game_view.dart | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/views/create_game_view.dart b/lib/views/create_game_view.dart index 609e9b0..7377178 100644 --- a/lib/views/create_game_view.dart +++ b/lib/views/create_game_view.dart @@ -25,7 +25,9 @@ class CreateGameView extends StatefulWidget { } class _CreateGameViewState extends State { - late List _playerNameTextControllers = []; + final List _playerNameTextControllers = [ + TextEditingController() + ]; final TextEditingController _gameTitleTextController = TextEditingController(); @@ -39,13 +41,12 @@ class _CreateGameViewState extends State { void initState() { _isPointsLimitEnabled = widget.isPointsLimitEnabled; _gameTitleTextController.text = widget.gameTitle ?? ''; + if (widget.players != null) { - _playerNameTextControllers = []; + _playerNameTextControllers.clear(); for (var player in widget.players!) { _playerNameTextControllers.add(TextEditingController(text: player)); } - } else { - _playerNameTextControllers = [TextEditingController()]; } super.initState(); } From de423aaec3483fa284b003b9481cc27db46a9df5 Mon Sep 17 00:00:00 2001 From: Felix Kirchner Date: Wed, 2 Jul 2025 17:41:05 +0200 Subject: [PATCH 4/4] Small changes --- lib/views/create_game_view.dart | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/views/create_game_view.dart b/lib/views/create_game_view.dart index 7377178..6c52890 100644 --- a/lib/views/create_game_view.dart +++ b/lib/views/create_game_view.dart @@ -34,11 +34,13 @@ class _CreateGameViewState extends State { /// Maximum number of players allowed in the game. final int maxPlayers = 5; - /// Variable to store the selected game mode. + /// Variable to store whether the points limit feature is enabled. bool? _isPointsLimitEnabled; @override void initState() { + super.initState(); + _isPointsLimitEnabled = widget.isPointsLimitEnabled; _gameTitleTextController.text = widget.gameTitle ?? ''; @@ -48,7 +50,6 @@ class _CreateGameViewState extends State { _playerNameTextControllers.add(TextEditingController(text: player)); } } - super.initState(); } @override @@ -348,6 +349,7 @@ class _CreateGameViewState extends State { for (var controller in _playerNameTextControllers) { controller.dispose(); } + super.dispose(); } }