Refactor winner selection and persistence logic in GameResultView
This commit is contained in:
@@ -82,10 +82,11 @@ class _GameResultViewState extends State<GameResultView> {
|
|||||||
Expanded(
|
Expanded(
|
||||||
child: RadioGroup<Player>(
|
child: RadioGroup<Player>(
|
||||||
groupValue: _selectedPlayer,
|
groupValue: _selectedPlayer,
|
||||||
onChanged: (Player? value) {
|
onChanged: (Player? value) async {
|
||||||
setState(() {
|
setState(() {
|
||||||
_selectedPlayer = value;
|
_selectedPlayer = value;
|
||||||
});
|
});
|
||||||
|
await _handleWinnerSaving();
|
||||||
},
|
},
|
||||||
child: ListView.builder(
|
child: ListView.builder(
|
||||||
itemCount: allPlayers.length,
|
itemCount: allPlayers.length,
|
||||||
@@ -95,22 +96,15 @@ class _GameResultViewState extends State<GameResultView> {
|
|||||||
value: allPlayers[index],
|
value: allPlayers[index],
|
||||||
onContainerTap: (value) async {
|
onContainerTap: (value) async {
|
||||||
setState(() {
|
setState(() {
|
||||||
|
// Check if the already selected player is the same as the newly tapped player.
|
||||||
if (_selectedPlayer == value) {
|
if (_selectedPlayer == value) {
|
||||||
|
// If yes deselected the player by setting it to null.
|
||||||
_selectedPlayer = null;
|
_selectedPlayer = null;
|
||||||
} else {
|
} else
|
||||||
_selectedPlayer = value;
|
// If no assign the newly tapped player to the selected player.
|
||||||
}
|
(_selectedPlayer = value);
|
||||||
});
|
});
|
||||||
if (_selectedPlayer == null) {
|
await _handleWinnerSaving();
|
||||||
await db.gameDao.removeWinner(
|
|
||||||
gameId: widget.game.id,
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
await db.gameDao.setWinner(
|
|
||||||
gameId: widget.game.id,
|
|
||||||
winnerId: _selectedPlayer!.id,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
@@ -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) {
|
List<Player> getAllPlayers(Game game) {
|
||||||
if (game.group == null && game.players != null) {
|
if (game.group == null && game.players != null) {
|
||||||
return [...game.players!];
|
return [...game.players!];
|
||||||
|
|||||||
Reference in New Issue
Block a user