Fixed bug in player selection
This commit is contained in:
@@ -12,13 +12,13 @@ import 'package:provider/provider.dart';
|
|||||||
|
|
||||||
class PlayerSelection extends StatefulWidget {
|
class PlayerSelection extends StatefulWidget {
|
||||||
final Function(List<Player> value) onChanged;
|
final Function(List<Player> value) onChanged;
|
||||||
final List<Player> availablePlayers;
|
final List<Player>? availablePlayers;
|
||||||
final List<Player>? initialSelectedPlayers;
|
final List<Player>? initialSelectedPlayers;
|
||||||
|
|
||||||
const PlayerSelection({
|
const PlayerSelection({
|
||||||
super.key,
|
super.key,
|
||||||
required this.onChanged,
|
required this.onChanged,
|
||||||
this.availablePlayers = const [],
|
this.availablePlayers,
|
||||||
this.initialSelectedPlayers,
|
this.initialSelectedPlayers,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -56,17 +56,17 @@ class _PlayerSelectionState extends State<PlayerSelection> {
|
|||||||
if (mounted) {
|
if (mounted) {
|
||||||
_allPlayersFuture.then((loadedPlayers) {
|
_allPlayersFuture.then((loadedPlayers) {
|
||||||
setState(() {
|
setState(() {
|
||||||
// If a list of available players is provided, use that list.
|
// If a list of available players is provided (even if empty), use that list.
|
||||||
if (widget.availablePlayers.isNotEmpty) {
|
if (widget.availablePlayers != null) {
|
||||||
widget.availablePlayers.sort((a, b) => a.name.compareTo(b.name));
|
widget.availablePlayers!.sort((a, b) => a.name.compareTo(b.name));
|
||||||
allPlayers = [...widget.availablePlayers];
|
allPlayers = [...widget.availablePlayers!];
|
||||||
suggestedPlayers = [...allPlayers];
|
suggestedPlayers = [...allPlayers];
|
||||||
|
|
||||||
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(
|
.where(
|
||||||
(p) => widget.availablePlayers.any(
|
(p) => widget.availablePlayers!.any(
|
||||||
(available) => available.id == p.id,
|
(available) => available.id == p.id,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@@ -193,11 +193,7 @@ class _PlayerSelectionState extends State<PlayerSelection> {
|
|||||||
replacement: TopCenteredMessage(
|
replacement: TopCenteredMessage(
|
||||||
icon: Icons.info,
|
icon: Icons.info,
|
||||||
title: 'Info',
|
title: 'Info',
|
||||||
message: allPlayers.isEmpty
|
message: _getInfoText(),
|
||||||
? 'No players created yet'
|
|
||||||
: (selectedPlayers.length == allPlayers.length)
|
|
||||||
? 'No more players to add'
|
|
||||||
: 'No players found with that name',
|
|
||||||
),
|
),
|
||||||
child: ListView.builder(
|
child: ListView.builder(
|
||||||
itemCount: suggestedPlayers.length,
|
itemCount: suggestedPlayers.length,
|
||||||
@@ -273,4 +269,22 @@ class _PlayerSelectionState extends State<PlayerSelection> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Determines the appropriate info text to display when no players
|
||||||
|
/// are available in the suggested players list.
|
||||||
|
String _getInfoText() {
|
||||||
|
if (widget.availablePlayers != null && widget.availablePlayers!.isEmpty) {
|
||||||
|
// Available players list is provided but empty
|
||||||
|
return 'All players added to the match';
|
||||||
|
} else if (allPlayers.isEmpty) {
|
||||||
|
// No players exist in the database
|
||||||
|
return 'No players created yet';
|
||||||
|
} else if (selectedPlayers.length == allPlayers.length) {
|
||||||
|
// All players have been selected
|
||||||
|
return 'No more players to add';
|
||||||
|
} else {
|
||||||
|
// No players match the search query
|
||||||
|
return 'No players found with that name';
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user