diff --git a/lib/ui/routes/home_route.dart b/lib/ui/routes/home_route.dart index 3b3bf603..716c8a20 100644 --- a/lib/ui/routes/home_route.dart +++ b/lib/ui/routes/home_route.dart @@ -46,7 +46,7 @@ class _HomePageState extends State { WidgetsBinding.instance.addPostFrameCallback((_) async { await Future.delayed(const Duration(milliseconds: 500), () { - if (!shouldShowcase || !mounted || context.findAncestorWidgetOfExactType() == null) return; + if (!shouldShowcase || !context.mounted || context.findAncestorWidgetOfExactType() == null) return; ShowCaseWidget.of(context).startShowCase([showCaseKey]); }); }); diff --git a/lib/ui/routes/main_route.dart b/lib/ui/routes/main_route.dart index c1e63ed1..2ecc4586 100644 --- a/lib/ui/routes/main_route.dart +++ b/lib/ui/routes/main_route.dart @@ -132,7 +132,7 @@ class RouteWidgetState extends State with TickerProviderStateMixin resizeToAvoidBottomInset: false, body: PlatformWillPopScope( canPop: canPop, - onPopInvoked: (didPop) { + onPopInvoked: (didPop, _) { if (didPop) return; if (children.every((e) => e is HomePage) && tabController.length > 1 && tabController.index == tabController.length - 1) { int newIndex = tabController.previousIndex; diff --git a/lib/ui/routes/setup_route.dart b/lib/ui/routes/setup_route.dart index 940ee751..66357835 100644 --- a/lib/ui/routes/setup_route.dart +++ b/lib/ui/routes/setup_route.dart @@ -67,7 +67,7 @@ class _SetupPageState extends State { @override Widget build(BuildContext context) { return PopScope( - onPopInvoked: (didPop) { + onPopInvokedWithResult: (didPop, _) { if (!didPop) return; SetupManager.dispose(); }, diff --git a/lib/ui/routes/subject_edit_route.dart b/lib/ui/routes/subject_edit_route.dart index 839d5eca..bb683f9a 100644 --- a/lib/ui/routes/subject_edit_route.dart +++ b/lib/ui/routes/subject_edit_route.dart @@ -75,7 +75,7 @@ class _SubjectEditRouteState extends SpinningFabPage { final String title = widget.creationType == CreationType.edit ? translations.edit_subjectOther : translations.add_subjectOther; return PopScope( - onPopInvoked: (didPop) { + onPopInvokedWithResult: (didPop, _) { if (!didPop) return; ScaffoldMessenger.of(context).removeCurrentSnackBar(); }, diff --git a/lib/ui/routes/subject_route.dart b/lib/ui/routes/subject_route.dart index 2d7dce9e..6f6b8984 100644 --- a/lib/ui/routes/subject_route.dart +++ b/lib/ui/routes/subject_route.dart @@ -153,12 +153,13 @@ class _SubjectRouteState extends SpinningFabPage { leadingText: testData[index].name, trailingText: testData[index].toString(), enableEqualLongPress: true, - onTap: () async { + onTap: () { if (widget.term.isYearOverview) return; showMenuActions(context, MenuAction.values, [translations.edit, translations.delete]).then((result) { switch (result) { case MenuAction.edit: + if (!context.mounted) return; showTestDialog(context, widget.subject, test: testData[index]).then((_) => refreshYearOverview()); case MenuAction.delete: heavyHaptics(); diff --git a/lib/ui/routes/year_route.dart b/lib/ui/routes/year_route.dart index 89c66a21..a565f83a 100644 --- a/lib/ui/routes/year_route.dart +++ b/lib/ui/routes/year_route.dart @@ -128,6 +128,7 @@ class _YearRouteState extends SpinningFabPage { void showPopupActions(BuildContext context, int index, Year year) { showMenuActions(context, YearAction.values, [translations.select, translations.edit, translations.delete]).then((result) { + if (!context.mounted) return; switch (result) { case YearAction.select: heavyHaptics(); diff --git a/lib/ui/widgets/list_widgets.dart b/lib/ui/widgets/list_widgets.dart index f0200d92..d292f4df 100644 --- a/lib/ui/widgets/list_widgets.dart +++ b/lib/ui/widgets/list_widgets.dart @@ -246,7 +246,7 @@ class _SubjectTileState extends State { WidgetsBinding.instance.addPostFrameCallback((_) async { await Future.delayed(const Duration(milliseconds: 500), () { - if (!widget.shouldShowcase || !mounted || context.findAncestorWidgetOfExactType() == null) return; + if (!widget.shouldShowcase || !context.mounted || context.findAncestorWidgetOfExactType() == null) return; ShowCaseWidget.of(context).startShowCase([showCaseKey1, showCaseKey2]); }); }); @@ -298,6 +298,7 @@ class _SubjectTileState extends State { showMenuActions(context, MenuAction.values, [translations.edit, translations.delete]).then((result) { switch (result) { case MenuAction.edit: + if (!context.mounted) return; showSubjectDialog( context, index1: widget.index1, diff --git a/lib/ui/widgets/misc_widgets.dart b/lib/ui/widgets/misc_widgets.dart index 9c25053b..03aad682 100644 --- a/lib/ui/widgets/misc_widgets.dart +++ b/lib/ui/widgets/misc_widgets.dart @@ -156,7 +156,7 @@ class PlatformWillPopScope extends StatelessWidget { required this.child, }); - final void Function(bool)? onPopInvoked; + final void Function(bool, dynamic)? onPopInvoked; final bool? canPop; final Widget child; @@ -164,7 +164,7 @@ class PlatformWillPopScope extends StatelessWidget { Widget build(BuildContext context) { return !isiOS ? PopScope( - onPopInvoked: onPopInvoked, + onPopInvokedWithResult: onPopInvoked, canPop: canPop ?? true, child: child, ) diff --git a/lib/ui/widgets/settings_tiles.dart b/lib/ui/widgets/settings_tiles.dart index 812e6bfc..81d81c0f 100644 --- a/lib/ui/widgets/settings_tiles.dart +++ b/lib/ui/widgets/settings_tiles.dart @@ -138,6 +138,7 @@ class ImportSettingsTile extends StatelessWidget { subtitle: translations.import_description, onTap: () => importData().then((success) { if (!success) heavyHaptics(); + if (!context.mounted) return; ScaffoldMessenger.of(context).showSnackBar( SnackBar(