2 Commits

Author SHA1 Message Date
1ed6290628 Refactor winner selection and persistence logic in GameResultView
Some checks failed
Pull Request Pipeline / test (pull_request) Successful in 2m25s
Pull Request Pipeline / lint (pull_request) Failing after 2m25s
2025-12-06 14:20:37 +01:00
91a7273964 madio radio list tile toggleable 2025-12-06 14:12:34 +01:00
2 changed files with 24 additions and 15 deletions

View File

@@ -82,10 +82,11 @@ class _GameResultViewState extends State<GameResultView> {
Expanded(
child: RadioGroup<Player>(
groupValue: _selectedPlayer,
onChanged: (Player? value) {
onChanged: (Player? value) async {
setState(() {
_selectedPlayer = value;
});
await _handleWinnerSaving();
},
child: ListView.builder(
itemCount: allPlayers.length,
@@ -95,22 +96,15 @@ class _GameResultViewState extends State<GameResultView> {
value: allPlayers[index],
onContainerTap: (value) async {
setState(() {
// Check if the already selected player is the same as the newly tapped player.
if (_selectedPlayer == value) {
// If yes deselected the player by setting it to null.
_selectedPlayer = null;
} else {
_selectedPlayer = value;
}
} else
// If no assign the newly tapped player to the selected player.
(_selectedPlayer = value);
});
if (_selectedPlayer == null) {
await db.gameDao.removeWinner(
gameId: widget.game.id,
);
} else {
await db.gameDao.setWinner(
gameId: widget.game.id,
winnerId: _selectedPlayer!.id,
);
}
await _handleWinnerSaving();
},
);
},
@@ -127,6 +121,17 @@ class _GameResultViewState extends State<GameResultView> {
);
}
Future<void> _handleWinnerSaving() async {
if (_selectedPlayer == null) {
await db.gameDao.removeWinner(gameId: widget.game.id);
} else {
await db.gameDao.setWinner(
gameId: widget.game.id,
winnerId: _selectedPlayer!.id,
);
}
}
List<Player> getAllPlayers(Game game) {
if (game.group == null && game.players != null) {
return [...game.players!];

View File

@@ -27,7 +27,11 @@ class CustomRadioListTile<T> extends StatelessWidget {
),
child: Row(
children: [
Radio<T>(value: value, activeColor: CustomTheme.primaryColor),
Radio<T>(
value: value,
activeColor: CustomTheme.primaryColor,
toggleable: true,
),
Expanded(
child: Text(
text,