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<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
Group? selectedGroup;
@@ -57,6 +63,8 @@ class _CreateGameViewState extends State<CreateGameView> {
/// the [ChooseRulesetView]
int selectedRulesetIndex = -1;
/// The index of the currently selected game in [games] to mark it in
/// the [ChooseGameView]
int selectedGameIndex = -1;
/// The currently selected players
@@ -105,6 +113,7 @@ class _CreateGameViewState extends State<CreateGameView> {
Future.wait([_allGroupsFuture, _allPlayersFuture]).then((result) async {
groupsList = result[0] as List<Group>;
playerList = result[1] as List<Player>;
filteredPlayerList = List.from(playerList);
});
}
@@ -194,33 +203,29 @@ class _CreateGameViewState extends State<CreateGameView> {
),
);
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(() {});
},
),
FutureBuilder(
future: _allPlayersFuture,
builder:
(BuildContext context, AsyncSnapshot<dynamic> snapshot) =>
Expanded(
child: PlayerSelection(
key: ValueKey(selectedGroup?.id ?? 'no_group'),
initialSelectedPlayers: selectedPlayers ?? [],
availablePlayers: selectedGroup == null
? playerList
: playerList
.where(
(p) => !selectedGroup!.members.any(
(m) => m.id == p.id,
),
)
.toList(),
onChanged: (value) {
setState(() {
selectedPlayers = value;
});
},
),
),
Expanded(
child: PlayerSelection(
key: ValueKey(selectedGroup?.id ?? 'no_group'),
initialSelectedPlayers: selectedPlayers ?? [],
availablePlayers: filteredPlayerList,
onChanged: (value) {
setState(() {
selectedPlayers = value;
});
},
),
),
CustomWidthButton(
text: 'Create game',
@@ -231,7 +236,7 @@ class _CreateGameViewState extends State<CreateGameView> {
Game game = Game(
name: _gameNameController.text.trim(),
createdAt: DateTime.now(),
group: selectedGroup!,
group: selectedGroup,
players: selectedPlayers,
);
await db.gameDao.addGame(game: game);

View File

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