CreateGroupView erstellt #28
@@ -36,8 +36,8 @@ class _CreateGroupViewState extends State<CreateGroupView> {
|
|||||||
_allPlayersFuture.then((loadedPlayers) {
|
_allPlayersFuture.then((loadedPlayers) {
|
||||||
setState(() {
|
setState(() {
|
||||||
loadedPlayers.sort((a, b) => a.name.compareTo(b.name));
|
loadedPlayers.sort((a, b) => a.name.compareTo(b.name));
|
||||||
allPlayers = loadedPlayers;
|
allPlayers = [...loadedPlayers];
|
||||||
suggestedPlayers = loadedPlayers;
|
suggestedPlayers = [...loadedPlayers];
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -123,7 +123,7 @@ class _CreateGroupViewState extends State<CreateGroupView> {
|
|||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
setState(() {
|
setState(() {
|
||||||
if (value.isEmpty) {
|
if (value.isEmpty) {
|
||||||
suggestedPlayers = allPlayers;
|
suggestedPlayers = [...allPlayers];
|
||||||
|
sneeex marked this conversation as resolved
Outdated
|
|||||||
} else {
|
} else {
|
||||||
suggestedPlayers = allPlayers.where((player) {
|
suggestedPlayers = allPlayers.where((player) {
|
||||||
return player.name.toLowerCase().contains(
|
return player.name.toLowerCase().contains(
|
||||||
@@ -197,11 +197,7 @@ class _CreateGroupViewState extends State<CreateGroupView> {
|
|||||||
SizedBox(height: 10),
|
SizedBox(height: 10),
|
||||||
FutureBuilder(
|
FutureBuilder(
|
||||||
future: _allPlayersFuture,
|
future: _allPlayersFuture,
|
||||||
builder:
|
builder: (BuildContext context, AsyncSnapshot<List<Player>> snapshot) {
|
||||||
(
|
|
||||||
BuildContext context,
|
|
||||||
AsyncSnapshot<List<Player>> snapshot,
|
|
||||||
) {
|
|
||||||
if (snapshot.hasError) {
|
if (snapshot.hasError) {
|
||||||
return const Center(
|
return const Center(
|
||||||
child: TopCenteredMessage(
|
child: TopCenteredMessage(
|
||||||
@@ -211,11 +207,10 @@ class _CreateGroupViewState extends State<CreateGroupView> {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (snapshot.connectionState ==
|
if (snapshot.connectionState == ConnectionState.done &&
|
||||||
ConnectionState.done &&
|
|
||||||
(!snapshot.hasData ||
|
(!snapshot.hasData ||
|
||||||
snapshot.data!.isEmpty ||
|
snapshot.data!.isEmpty ||
|
||||||
(suggestedPlayers.isEmpty &&
|
(selectedPlayers.isEmpty &&
|
||||||
allPlayers.isEmpty))) {
|
allPlayers.isEmpty))) {
|
||||||
return const Center(
|
return const Center(
|
||||||
child: TopCenteredMessage(
|
child: TopCenteredMessage(
|
||||||
@@ -226,8 +221,7 @@ class _CreateGroupViewState extends State<CreateGroupView> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
final bool isLoading =
|
final bool isLoading =
|
||||||
snapshot.connectionState ==
|
snapshot.connectionState == ConnectionState.waiting;
|
||||||
ConnectionState.waiting;
|
|
||||||
return Expanded(
|
return Expanded(
|
||||||
child: Skeletonizer(
|
child: Skeletonizer(
|
||||||
effect: PulseEffect(
|
effect: PulseEffect(
|
||||||
@@ -237,13 +231,12 @@ class _CreateGroupViewState extends State<CreateGroupView> {
|
|||||||
),
|
),
|
||||||
enabled: isLoading,
|
enabled: isLoading,
|
||||||
enableSwitchAnimation: true,
|
enableSwitchAnimation: true,
|
||||||
switchAnimationConfig:
|
switchAnimationConfig: const SwitchAnimationConfig(
|
||||||
const SwitchAnimationConfig(
|
|
||||||
duration: Duration(milliseconds: 200),
|
duration: Duration(milliseconds: 200),
|
||||||
switchInCurve: Curves.linear,
|
switchInCurve: Curves.linear,
|
||||||
switchOutCurve: Curves.linear,
|
switchOutCurve: Curves.linear,
|
||||||
transitionBuilder: AnimatedSwitcher
|
transitionBuilder:
|
||||||
.defaultTransitionBuilder,
|
AnimatedSwitcher.defaultTransitionBuilder,
|
||||||
layoutBuilder:
|
layoutBuilder:
|
||||||
AnimatedSwitcher.defaultLayoutBuilder,
|
AnimatedSwitcher.defaultLayoutBuilder,
|
||||||
),
|
),
|
||||||
@@ -254,7 +247,10 @@ class _CreateGroupViewState extends State<CreateGroupView> {
|
|||||||
icon: Icons.info,
|
icon: Icons.info,
|
||||||
title: 'Info',
|
title: 'Info',
|
||||||
message:
|
message:
|
||||||
'No players found with that name.',
|
(selectedPlayers.length ==
|
||||||
|
allPlayers.length)
|
||||||
|
? 'No more players to add.'
|
||||||
|
: 'No players found with that name.',
|
||||||
)
|
)
|
||||||
: ListView.builder(
|
: ListView.builder(
|
||||||
itemCount: suggestedPlayers.length,
|
itemCount: suggestedPlayers.length,
|
||||||
@@ -272,13 +268,13 @@ class _CreateGroupViewState extends State<CreateGroupView> {
|
|||||||
border: Border.all(
|
border: Border.all(
|
||||||
color: CustomTheme.boxBorder,
|
color: CustomTheme.boxBorder,
|
||||||
),
|
),
|
||||||
|
sneeex marked this conversation as resolved
Outdated
flixcoo
commented
Button sieht deaktiviert aus wie ein SecondaryButton, styling anpassen. Ggf. Attribut festlegen, welches festlegt ob Button primary styling oder secondary styling hat Button sieht deaktiviert aus wie ein SecondaryButton, styling anpassen. Ggf. Attribut festlegen, welches festlegt ob Button primary styling oder secondary styling hat
|
|||||||
borderRadius:
|
borderRadius: BorderRadius.circular(
|
||||||
BorderRadius.circular(12),
|
12,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment:
|
mainAxisAlignment:
|
||||||
MainAxisAlignment
|
MainAxisAlignment.spaceBetween,
|
||||||
.spaceBetween,
|
|
||||||
mainAxisSize: MainAxisSize.max,
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
sneeex marked this conversation as resolved
Outdated
flixcoo
commented
`const` bzw #35 reinmergen und weglassen
|
|||||||
children: [
|
children: [
|
||||||
|
sneeex marked this conversation as resolved
Outdated
flixcoo
commented
Füg hier folgende Zeile ein und entferne die anderen beiden Füg hier folgende Zeile ein und entferne die anderen beiden `if`s
```dart
if (!context.mounted) return;
```
sneeex
commented
Aber wenn's nicht mounted ist, will ich doch trotzdem noch die Felder clearen? > Füg hier folgende Zeile ein und entferne die anderen beiden `if`s
> ```dart
> if (!context.mounted) return;
> ```
Aber wenn's nicht mounted ist, will ich doch trotzdem noch die Felder clearen?
flixcoo
commented
Der Context ist nicht mehr verfügbar, wenn z.B. das Widget garnicht mehr im widget tree ist. Also ist das dann eh egal Der Context ist nicht mehr verfügbar, wenn z.B. das Widget garnicht mehr im widget tree ist. Also ist das dann eh egal
|
|||||||
Text(
|
Text(
|
||||||
@@ -289,10 +285,7 @@ class _CreateGroupViewState extends State<CreateGroupView> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
|
sneeex marked this conversation as resolved
Outdated
flixcoo
commented
Bei asynchronen aufgaben Bei asynchronen aufgaben `mounted` check
|
|||||||
icon: Icon(
|
icon: Icon(Icons.add, size: 20),
|
||||||
Icons.add,
|
|
||||||
size: 20,
|
|
||||||
),
|
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
sneeex marked this conversation as resolved
Outdated
flixcoo
commented
`mounted` check
|
|||||||
setState(() {
|
setState(() {
|
||||||
if (!selectedPlayers.contains(
|
if (!selectedPlayers.contains(
|
||||||
@@ -302,10 +295,8 @@ class _CreateGroupViewState extends State<CreateGroupView> {
|
|||||||
suggestedPlayers[index],
|
suggestedPlayers[index],
|
||||||
);
|
);
|
||||||
selectedPlayers.sort(
|
selectedPlayers.sort(
|
||||||
(a, b) =>
|
(a, b) => a.name
|
||||||
a.name.compareTo(
|
.compareTo(b.name),
|
||||||
b.name,
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
suggestedPlayers.remove(
|
suggestedPlayers.remove(
|
||||||
suggestedPlayers[index],
|
suggestedPlayers[index],
|
||||||
|
|||||||
Reference in New Issue
Block a user
const SizedBox()