This commit is contained in:
2025-11-01 15:52:12 +01:00
parent 3054027ebf
commit 1c6c19c4c9
6 changed files with 67 additions and 30 deletions

View File

@@ -55,8 +55,17 @@ class _LayoutDetailPageState extends State<LayoutDetailPage> {
Future<void> _refreshLayout() async {
final updated = await apiService.getStoreLayoutById(_layout.id);
if (updated != null && mounted) {
if (!mounted) return;
if (updated != null) {
setState(() => _layout = updated);
return;
}
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Dieses Layout ist nicht mehr verfügbar.')),
);
if (mounted) {
Navigator.of(context).pop();
}
}

View File

@@ -627,12 +627,11 @@ class _ListDetailPageState extends State<ListDetailPage> {
).showSnackBar(SnackBar(content: Text('"${item.name}" gelöscht.')));
}
} catch (e) {
if (!mounted) return;
setState(() => _items.insert(index, item));
if (mounted) {
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text('Fehler beim Löschen: $e')));
}
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text('Fehler beim Löschen: $e')));
}
}
@@ -642,12 +641,11 @@ class _ListDetailPageState extends State<ListDetailPage> {
try {
await apiService.updateItem(item.id, checked: item.checked);
} catch (e) {
if (!mounted) return;
setState(() => item.checked = oldState);
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Fehler beim Aktualisieren: $e')),
);
}
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Fehler beim Aktualisieren: $e')),
);
}
}

View File

@@ -30,7 +30,9 @@ class _LoginPageState extends State<LoginPage> {
await apiService.login(email, password);
}
} catch (e) {
setState(() => _error = e.toString());
if (mounted) {
setState(() => _error = e.toString());
}
} finally {
if (mounted) {
setState(() => _loading = false);
@@ -38,6 +40,13 @@ class _LoginPageState extends State<LoginPage> {
}
}
@override
void dispose() {
_emailCtl.dispose();
_pwCtl.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(

View File

@@ -80,16 +80,22 @@ class _MembersDialogState extends State<MembersDialog> {
final List<String> newMembers = [...widget.list.members, user.id];
await apiService.updateList(widget.list.id, members: newMembers);
setState(() {
widget.list.members = newMembers;
_userEmails[user.id] = user.data['email'] as String;
_emailCtl.clear();
_hasChanges = true;
});
if (mounted) {
setState(() {
widget.list.members = newMembers;
_userEmails[user.id] = user.data['email'] as String;
_emailCtl.clear();
_hasChanges = true;
});
}
} catch (e) {
setState(() => _error = e.toString());
if (mounted) {
setState(() => _error = e.toString());
}
} finally {
setState(() => _isLoading = false);
if (mounted) {
setState(() => _isLoading = false);
}
}
}
@@ -128,17 +134,29 @@ class _MembersDialogState extends State<MembersDialog> {
.toList();
await apiService.updateList(widget.list.id, members: newMembers);
setState(() {
widget.list.members = newMembers;
_hasChanges = true;
});
if (mounted) {
setState(() {
widget.list.members = newMembers;
_hasChanges = true;
});
}
} catch (e) {
setState(() => _error = e.toString());
if (mounted) {
setState(() => _error = e.toString());
}
} finally {
setState(() => _isLoading = false);
if (mounted) {
setState(() => _isLoading = false);
}
}
}
@override
void dispose() {
_emailCtl.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final bool isOwner = widget.list.owner == apiService.userId;