PlayerSelection Widget implementiert #72
@@ -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(
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user