Lokalisierung implementieren #112

Merged
sneeex merged 41 commits from feature/100-lokalisierung-hinzufügen into development 2026-01-07 11:30:11 +00:00
2 changed files with 30 additions and 20 deletions
Showing only changes of commit 31abb7f1e4 - Show all commits

View File

@@ -83,8 +83,10 @@ class _CreateMatchViewState extends State<CreateMatchView> {
]).then((result) async { ]).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>;
setState(() {
filteredPlayerList = List.from(playerList);
});
}); });
filteredPlayerList = List.from(playerList);
} }
List<(Ruleset, String)> _getRulesets(BuildContext context) { List<(Ruleset, String)> _getRulesets(BuildContext context) {

View File

@@ -13,13 +13,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,
}); });
@@ -57,17 +57,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,
), ),
) )
@@ -189,9 +189,6 @@ class _PlayerSelectionState extends State<PlayerSelection> {
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold), style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
), ),
const SizedBox(height: 10), const SizedBox(height: 10),
/*
*/
Expanded( Expanded(
child: AppSkeleton( child: AppSkeleton(
enabled: isLoading, enabled: isLoading,
@@ -199,14 +196,8 @@ class _PlayerSelectionState extends State<PlayerSelection> {
visible: suggestedPlayers.isNotEmpty, visible: suggestedPlayers.isNotEmpty,
replacement: TopCenteredMessage( replacement: TopCenteredMessage(
icon: Icons.info, icon: Icons.info,
title: AppLocalizations.of(context).info, title: 'Info',
message: allPlayers.isEmpty message: _getInfoText(),
? AppLocalizations.of(context).no_players_created_yet
: (selectedPlayers.length == allPlayers.length)
? AppLocalizations.of(context).all_players_selected
: AppLocalizations.of(
context,
).no_players_found_with_that_name,
), ),
child: ListView.builder( child: ListView.builder(
itemCount: suggestedPlayers.length, itemCount: suggestedPlayers.length,
@@ -240,7 +231,7 @@ class _PlayerSelectionState extends State<PlayerSelection> {
} }
/// Adds a new player to the database from the search bar input. /// Adds a new player to the database from the search bar input.
/// Shows a snackbar indicating success xfor failure. /// Shows a snackbar indicating success or failure.
/// [context] - BuildContext to show the snackbar. /// [context] - BuildContext to show the snackbar.
void addNewPlayerFromSearch({required BuildContext context}) async { void addNewPlayerFromSearch({required BuildContext context}) async {
String playerName = _searchBarController.text.trim(); String playerName = _searchBarController.text.trim();
@@ -284,4 +275,21 @@ 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 (allPlayers.isEmpty) {
// No players exist in the database
return AppLocalizations.of(context).no_players_created_yet;
} else if (selectedPlayers.length == allPlayers.length ||
widget.availablePlayers?.isEmpty == true) {
// All players have been selected or
// available players list is provided but empty
return AppLocalizations.of(context).all_players_selected;
} else {
// No players match the search query
return AppLocalizations.of(context).no_players_found_with_that_name;
}
}
} }