3 Commits

Author SHA1 Message Date
3b3d298ff5 Small refactoring
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m1s
Pull Request Pipeline / lint (pull_request) Successful in 2m6s
2025-12-10 14:04:15 +01:00
e1626225ac Removed future builder 2025-12-10 13:56:03 +01:00
93ced81e7e Fixed filtering problem with object reference 2025-12-10 13:55:31 +01:00
2 changed files with 35 additions and 26 deletions

View File

@@ -43,6 +43,12 @@ class _CreateGameViewState extends State<CreateGameView> {
/// List of all players from the database /// List of all players from the database
List<Player> playerList = []; List<Player> playerList = [];
/// List of players filtered based on the selected group
/// If a group is selected, this list contains all players from [playerList]
/// who are not members of the selected group. If no group is selected,
/// this list is identical to [playerList].
List<Player> filteredPlayerList = [];
/// The currently selected group /// The currently selected group
Group? selectedGroup; Group? selectedGroup;
@@ -57,6 +63,8 @@ class _CreateGameViewState extends State<CreateGameView> {
/// the [ChooseRulesetView] /// the [ChooseRulesetView]
int selectedRulesetIndex = -1; int selectedRulesetIndex = -1;
/// The index of the currently selected game in [games] to mark it in
/// the [ChooseGameView]
int selectedGameIndex = -1; int selectedGameIndex = -1;
/// The currently selected players /// The currently selected players
@@ -105,6 +113,7 @@ class _CreateGameViewState extends State<CreateGameView> {
Future.wait([_allGroupsFuture, _allPlayersFuture]).then((result) async { Future.wait([_allGroupsFuture, _allPlayersFuture]).then((result) async {
groupsList = result[0] as List<Group>; groupsList = result[0] as List<Group>;
playerList = result[1] as List<Player>; playerList = result[1] as List<Player>;
filteredPlayerList = List.from(playerList);
}); });
} }
@@ -194,26 +203,23 @@ class _CreateGameViewState extends State<CreateGameView> {
), ),
); );
selectedGroupId = selectedGroup?.id ?? ''; selectedGroupId = selectedGroup?.id ?? '';
if (selectedGroup != null) {
filteredPlayerList = playerList
.where(
(p) => !selectedGroup!.members.any((m) => m.id == p.id),
)
.toList();
} else {
filteredPlayerList = List.from(playerList);
}
setState(() {}); setState(() {});
}, },
), ),
FutureBuilder(
future: _allPlayersFuture,
builder:
(BuildContext context, AsyncSnapshot<dynamic> snapshot) =>
Expanded( Expanded(
child: PlayerSelection( child: PlayerSelection(
key: ValueKey(selectedGroup?.id ?? 'no_group'), key: ValueKey(selectedGroup?.id ?? 'no_group'),
initialSelectedPlayers: selectedPlayers ?? [], initialSelectedPlayers: selectedPlayers ?? [],
availablePlayers: selectedGroup == null availablePlayers: filteredPlayerList,
? playerList
: playerList
.where(
(p) => !selectedGroup!.members.any(
(m) => m.id == p.id,
),
)
.toList(),
onChanged: (value) { onChanged: (value) {
setState(() { setState(() {
selectedPlayers = value; selectedPlayers = value;
@@ -221,7 +227,6 @@ class _CreateGameViewState extends State<CreateGameView> {
}, },
), ),
), ),
),
CustomWidthButton( CustomWidthButton(
text: 'Create game', text: 'Create game',
sizeRelativeToWidth: 0.95, sizeRelativeToWidth: 0.95,
@@ -231,7 +236,7 @@ class _CreateGameViewState extends State<CreateGameView> {
Game game = Game( Game game = Game(
name: _gameNameController.text.trim(), name: _gameNameController.text.trim(),
createdAt: DateTime.now(), createdAt: DateTime.now(),
group: selectedGroup!, group: selectedGroup,
players: selectedPlayers, players: selectedPlayers,
); );
await db.gameDao.addGame(game: game); await db.gameDao.addGame(game: game);

View File

@@ -62,7 +62,11 @@ class _PlayerSelectionState extends State<PlayerSelection> {
if (widget.initialSelectedPlayers != null) { if (widget.initialSelectedPlayers != null) {
// Ensures that only players available for selection are pre-selected. // Ensures that only players available for selection are pre-selected.
selectedPlayers = widget.initialSelectedPlayers! selectedPlayers = widget.initialSelectedPlayers!
.where((p) => widget.availablePlayers.contains(p)) .where(
(p) => widget.availablePlayers.any(
(available) => available.id == p.id,
),
)
.toList(); .toList();
} }
} else { } else {