MVP #141

Merged
flixcoo merged 705 commits from development into main 2026-01-09 12:55:50 +00:00
2 changed files with 16 additions and 30 deletions
Showing only changes of commit f1bd9c18e0 - Show all commits

View File

@@ -72,11 +72,8 @@ class _CreateGroupViewState extends State<CreateGroupView> {
child: SelectPlayerWidget( child: SelectPlayerWidget(
groupNameController: _groupNameController, groupNameController: _groupNameController,
searchBarController: _searchBarController, searchBarController: _searchBarController,
selectedPlayers: selectedPlayers,
onChanged: (value) { onChanged: (value) {
setState(() { selectedPlayers = [...value];
selectedPlayers = [...value];
});
print(selectedPlayers); print(selectedPlayers);
}, },
), ),
@@ -99,7 +96,6 @@ class _CreateGroupViewState extends State<CreateGroupView> {
if (success) { if (success) {
_groupNameController.clear(); _groupNameController.clear();
_searchBarController.clear(); _searchBarController.clear();
selectedPlayers.clear();
Navigator.pop(context); Navigator.pop(context);
} else { } else {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(

View File

@@ -12,14 +12,12 @@ import 'package:skeletonizer/skeletonizer.dart';
class SelectPlayerWidget extends StatefulWidget { class SelectPlayerWidget extends StatefulWidget {
final TextEditingController groupNameController; final TextEditingController groupNameController;
final TextEditingController searchBarController; final TextEditingController searchBarController;
final List<Player> selectedPlayers;
final Function(List<Player> value) onChanged; final Function(List<Player> value) onChanged;
const SelectPlayerWidget({ const SelectPlayerWidget({
super.key, super.key,
required this.groupNameController, required this.groupNameController,
required this.searchBarController, required this.searchBarController,
required this.selectedPlayers,
required this.onChanged, required this.onChanged,
}); });
@@ -28,6 +26,7 @@ class SelectPlayerWidget extends StatefulWidget {
} }
class _SelectPlayerWidgetState extends State<SelectPlayerWidget> { class _SelectPlayerWidgetState extends State<SelectPlayerWidget> {
List<Player> selectedPlayers = [];
List<Player> suggestedPlayers = []; List<Player> suggestedPlayers = [];
List<Player> allPlayers = []; List<Player> allPlayers = [];
late final TextEditingController _searchBarController; late final TextEditingController _searchBarController;
@@ -88,14 +87,14 @@ class _SelectPlayerWidgetState extends State<SelectPlayerWidget> {
setState(() { setState(() {
if (value.isEmpty) { if (value.isEmpty) {
suggestedPlayers = allPlayers.where((player) { suggestedPlayers = allPlayers.where((player) {
return !widget.selectedPlayers.contains(player); return !selectedPlayers.contains(player);
}).toList(); }).toList();
} else { } else {
suggestedPlayers = allPlayers.where((player) { suggestedPlayers = allPlayers.where((player) {
final bool nameMatches = player.name.toLowerCase().contains( final bool nameMatches = player.name.toLowerCase().contains(
value.toLowerCase(), value.toLowerCase(),
); );
final bool isNotSelected = !widget.selectedPlayers.contains( final bool isNotSelected = !selectedPlayers.contains(
player, player,
); );
return nameMatches && isNotSelected; return nameMatches && isNotSelected;
@@ -106,7 +105,7 @@ class _SelectPlayerWidgetState extends State<SelectPlayerWidget> {
), ),
const SizedBox(height: 10), const SizedBox(height: 10),
Text( Text(
'Ausgewählte Spieler: (${widget.selectedPlayers.length})', 'Ausgewählte Spieler: (${selectedPlayers.length})',
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold), style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
), ),
const SizedBox(height: 10), const SizedBox(height: 10),
@@ -116,19 +115,15 @@ class _SelectPlayerWidgetState extends State<SelectPlayerWidget> {
spacing: 8.0, spacing: 8.0,
runSpacing: 8.0, runSpacing: 8.0,
children: <Widget>[ children: <Widget>[
for (var player in widget.selectedPlayers) for (var player in selectedPlayers)
TextIconTile( TextIconTile(
text: player.name, text: player.name,
onIconTap: () { onIconTap: () {
setState(() { setState(() {
final currentSearch = _searchBarController.text final currentSearch = _searchBarController.text
.toLowerCase(); .toLowerCase();
//widget.selectedPlayers.remove(player); selectedPlayers.remove(player);
widget.onChanged( widget.onChanged([...selectedPlayers]);
widget.selectedPlayers
.where((p) => p != player)
.toList(),
);
if (currentSearch.isEmpty || if (currentSearch.isEmpty ||
player.name.toLowerCase().contains(currentSearch)) { player.name.toLowerCase().contains(currentSearch)) {
suggestedPlayers.add(player); suggestedPlayers.add(player);
@@ -203,16 +198,13 @@ class _SelectPlayerWidgetState extends State<SelectPlayerWidget> {
text: suggestedPlayers[index].name, text: suggestedPlayers[index].name,
onPressed: () { onPressed: () {
setState(() { setState(() {
if (!widget.selectedPlayers.contains( if (!selectedPlayers.contains(
suggestedPlayers[index], suggestedPlayers[index],
)) { )) {
/*widget.selectedPlayers.add( selectedPlayers.add(
suggestedPlayers[index], suggestedPlayers[index],
);*/ );
widget.onChanged([ widget.onChanged([...selectedPlayers]);
...widget.selectedPlayers,
suggestedPlayers[index],
]);
suggestedPlayers.remove( suggestedPlayers.remove(
suggestedPlayers[index], suggestedPlayers[index],
); );
@@ -225,9 +217,7 @@ class _SelectPlayerWidgetState extends State<SelectPlayerWidget> {
child: TopCenteredMessage( child: TopCenteredMessage(
icon: Icons.info, icon: Icons.info,
title: 'Info', title: 'Info',
message: message: (selectedPlayers.length == allPlayers.length)
(widget.selectedPlayers.length ==
allPlayers.length)
? 'No more players to add.' ? 'No more players to add.'
: 'No players found with that name.', : 'No players found with that name.',
), ),
@@ -250,13 +240,13 @@ class _SelectPlayerWidgetState extends State<SelectPlayerWidget> {
bool success = await db.playerDao.addPlayer(player: createdPlayer); bool success = await db.playerDao.addPlayer(player: createdPlayer);
if (!context.mounted) return; if (!context.mounted) return;
if (success) { if (success) {
//widget.selectedPlayers.add(createdPlayer); selectedPlayers.add(createdPlayer);
widget.onChanged([...widget.selectedPlayers, createdPlayer]); widget.onChanged([...selectedPlayers]);
allPlayers.add(createdPlayer); allPlayers.add(createdPlayer);
setState(() { setState(() {
_searchBarController.clear(); _searchBarController.clear();
suggestedPlayers = allPlayers.where((player) { suggestedPlayers = allPlayers.where((player) {
return !widget.selectedPlayers.contains(player); return !selectedPlayers.contains(player);
}).toList(); }).toList();
}); });
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(