Merge branch 'development' into feature/6-statisticsview-erstellen
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m33s
Pull Request Pipeline / lint (pull_request) Successful in 2m33s

This commit is contained in:
2025-11-23 00:36:33 +01:00
2 changed files with 56 additions and 61 deletions

View File

@@ -49,8 +49,7 @@ class _CreateGroupViewState extends State<CreateGroupView> {
@override @override
void dispose() { void dispose() {
_groupNameController.dispose(); _groupNameController.dispose();
_searchBarController _searchBarController.dispose();
.dispose(); // Listener entfernen und Controller aufräumen
super.dispose(); super.dispose();
} }
@@ -67,8 +66,7 @@ class _CreateGroupViewState extends State<CreateGroupView> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SafeArea( return Scaffold(
child: Scaffold(
backgroundColor: CustomTheme.backgroundColor, backgroundColor: CustomTheme.backgroundColor,
appBar: AppBar( appBar: AppBar(
backgroundColor: CustomTheme.backgroundColor, backgroundColor: CustomTheme.backgroundColor,
@@ -79,7 +77,8 @@ class _CreateGroupViewState extends State<CreateGroupView> {
), ),
centerTitle: true, centerTitle: true,
), ),
body: Column( body: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
Container( Container(
@@ -123,12 +122,7 @@ class _CreateGroupViewState extends State<CreateGroupView> {
.trim() .trim()
.isNotEmpty, .isNotEmpty,
onTrailingButtonPressed: () async { onTrailingButtonPressed: () async {
addNewPlayerFromSearch( addNewPlayerFromSearch(context: context);
context: context,
searchBarController: _searchBarController,
db: db,
loadPlayerList: loadPlayerList,
);
}, },
onChanged: (value) { onChanged: (value) {
setState(() { setState(() {
@@ -339,25 +333,24 @@ class _CreateGroupViewState extends State<CreateGroupView> {
), ),
); );
} }
}
/// 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 or failure. /// Shows a snackbar indicating success or failure.
/// [context] - BuildContext to show the snackbar. /// [context] - BuildContext to show the snackbar.
/// [searchBarController] - TextEditingController of the search bar. void addNewPlayerFromSearch({required BuildContext context}) async {
/// [db] - AppDatabase instance to interact with the database. String playerName = _searchBarController.text.trim();
/// [loadPlayerList] - Function to reload the player list after adding. Player createdPlayer = Player(name: playerName);
void addNewPlayerFromSearch({ bool success = await db.playerDao.addPlayer(player: createdPlayer);
required BuildContext context,
required TextEditingController searchBarController,
required AppDatabase db,
required Function loadPlayerList,
}) async {
String playerName = searchBarController.text.trim();
bool success = await db.playerDao.addPlayer(player: Player(name: playerName));
if (!context.mounted) return; if (!context.mounted) return;
if (success) { if (success) {
loadPlayerList(); selectedPlayers.add(createdPlayer);
allPlayers.add(createdPlayer);
setState(() {
_searchBarController.clear();
suggestedPlayers = allPlayers.where((player) {
return !selectedPlayers.contains(player);
}).toList();
});
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar( SnackBar(
backgroundColor: CustomTheme.boxColor, backgroundColor: CustomTheme.boxColor,
@@ -369,7 +362,6 @@ void addNewPlayerFromSearch({
), ),
), ),
); );
searchBarController.clear();
} else { } else {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar( SnackBar(
@@ -383,4 +375,5 @@ void addNewPlayerFromSearch({
), ),
); );
} }
}
} }

View File

@@ -69,9 +69,9 @@ class _GroupsViewState extends State<GroupsView> {
} }
final bool isLoading = final bool isLoading =
snapshot.connectionState == ConnectionState.waiting; snapshot.connectionState == ConnectionState.waiting;
final List<Group> groups = isLoading final List<Group> groups =
? skeletonData isLoading ? skeletonData : (snapshot.data ?? [])
: (snapshot.data ?? []); ..sort((a, b) => b.createdAt.compareTo(a.createdAt));
return Skeletonizer( return Skeletonizer(
effect: PulseEffect( effect: PulseEffect(
from: Colors.grey[800]!, from: Colors.grey[800]!,
@@ -93,7 +93,9 @@ class _GroupsViewState extends State<GroupsView> {
itemCount: groups.length + 1, itemCount: groups.length + 1,
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
if (index == groups.length) { if (index == groups.length) {
return const SizedBox(height: 60); return SizedBox(
height: MediaQuery.paddingOf(context).bottom - 20,
);
} }
return GroupTile(group: groups[index]); return GroupTile(group: groups[index]);
}, },