From 97d44865a6287ac5ab41e1553a4a49a88ac9323a Mon Sep 17 00:00:00 2001 From: Fries_I23 <20661034+FriesI23@users.noreply.github.com> Date: Sat, 29 Jun 2024 14:45:30 +0800 Subject: [PATCH] fix: show black screen when back from main screen Navigator.pop() behavior has changed. it will not exit app in new widget `PopScope`. This has been handled separately. --- lib/extension/navigator_extensions.dart | 24 ++++++++++++++++++++++++ lib/view/page_habits_display.dart | 5 ++++- lib/view/page_habits_status_changer.dart | 5 ++++- 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 lib/extension/navigator_extensions.dart diff --git a/lib/extension/navigator_extensions.dart b/lib/extension/navigator_extensions.dart new file mode 100644 index 00000000..e22ce51f --- /dev/null +++ b/lib/extension/navigator_extensions.dart @@ -0,0 +1,24 @@ +// Copyright 2024 Fries_I23 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +extension NavigatorExtension on NavigatorState { + @optionalTypeArgs + Future popOrExit([T? result]) async { + if (!canPop()) return SystemNavigator.pop(); + return pop(result); + } +} diff --git a/lib/view/page_habits_display.dart b/lib/view/page_habits_display.dart index 42721985..57e2d245 100644 --- a/lib/view/page_habits_display.dart +++ b/lib/view/page_habits_display.dart @@ -31,6 +31,7 @@ import '../component/helper.dart'; import '../component/widget.dart'; import '../extension/async_extensions.dart'; import '../extension/color_extensions.dart'; +import '../extension/navigator_extensions.dart'; import '../l10n/localizations.dart'; import '../logging/helper.dart'; import '../model/habit_daily_record_form.dart'; @@ -1104,7 +1105,9 @@ class _HabitsDisplayView extends State onPopInvoked: (didPop) async { if (didPop) return; final canPopNow = await onWillPop(); - if (mounted && canPopNow) Navigator.pop(this.context); + if (mounted && canPopNow) { + await Navigator.of(this.context).popOrExit(); + } }, child: Scaffold( resizeToAvoidBottomInset: false, diff --git a/lib/view/page_habits_status_changer.dart b/lib/view/page_habits_status_changer.dart index a4617ffe..570f7eb1 100644 --- a/lib/view/page_habits_status_changer.dart +++ b/lib/view/page_habits_status_changer.dart @@ -23,6 +23,7 @@ import '../common/utils.dart'; import '../component/helper.dart'; import '../component/widget.dart'; import '../extension/context_extensions.dart'; +import '../extension/navigator_extensions.dart'; import '../logging/helper.dart'; import '../model/custom_date_format.dart'; import '../model/habit_date.dart'; @@ -177,7 +178,9 @@ class _HabitsStatusChangerView extends State { : true; if (!mounted) return; - if (result) dismissAllToolTips().then((_) => Navigator.pop(context)); + if (result) { + dismissAllToolTips().then((_) => Navigator.of(context).popOrExit()); + } } Widget _buildDebugInfo(BuildContext context) =>