From 6075cc58175a94dd0613d2b4328e8724d4d949a0 Mon Sep 17 00:00:00 2001 From: Fries_I23 Date: Mon, 22 Apr 2024 15:33:39 +0800 Subject: [PATCH 1/2] fix: opencontrainer raise exception when navigate via tooltips see: https://github.com/flutter/flutter/issues/141497 --- lib/common/utils.dart | 9 +++++++++ lib/component/widgets/page_back_button.dart | 13 +++++++++++-- lib/view/page_habits_status_changer.dart | 5 ++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/lib/common/utils.dart b/lib/common/utils.dart index b8c8869b..9e5864f9 100644 --- a/lib/common/utils.dart +++ b/lib/common/utils.dart @@ -16,6 +16,7 @@ import 'dart:math' as math; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; import 'package:tuple/tuple.dart'; import 'package:url_launcher/url_launcher.dart' as url_launcher; import 'package:url_launcher/url_launcher_string.dart'; @@ -221,3 +222,11 @@ T stampDateTime(T t, {required T max, required T min}) { t = t < min ? min : t; return t; } + +Future dismissAllToolTips() async { + final result = Tooltip.dismissAllToolTips(); + await Future.delayed(result + ? const Duration(milliseconds: 150) * timeDilation + : Duration.zero); + return result; +} diff --git a/lib/component/widgets/page_back_button.dart b/lib/component/widgets/page_back_button.dart index e095962f..7803c91b 100644 --- a/lib/component/widgets/page_back_button.dart +++ b/lib/component/widgets/page_back_button.dart @@ -14,6 +14,8 @@ import 'package:flutter/material.dart'; +import '../../common/utils.dart'; + enum PageBackReason { back, close } class PageBackButton extends StatelessWidget { @@ -28,16 +30,23 @@ class PageBackButton extends StatelessWidget { this.onPressed, }); + void _onPressedCallback(BuildContext context) => + dismissAllToolTips().then((_) => Navigator.maybePop(context)); + @override Widget build(BuildContext context) { switch (reason) { case PageBackReason.back: return Center( - child: BackButton(onPressed: onPressed, color: color), + child: BackButton( + onPressed: onPressed ?? () => _onPressedCallback(context), + color: color), ); case PageBackReason.close: return Center( - child: CloseButton(onPressed: onPressed, color: color), + child: CloseButton( + onPressed: onPressed ?? () => _onPressedCallback(context), + color: color), ); } } diff --git a/lib/view/page_habits_status_changer.dart b/lib/view/page_habits_status_changer.dart index 5ebff6c6..1f9fabd7 100644 --- a/lib/view/page_habits_status_changer.dart +++ b/lib/view/page_habits_status_changer.dart @@ -13,12 +13,14 @@ // limitations under the License. import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; import 'package:great_list_view/great_list_view.dart'; import 'package:provider/provider.dart'; import 'package:sliver_tools/sliver_tools.dart'; import 'package:tuple/tuple.dart'; import '../common/types.dart'; +import '../common/utils.dart'; import '../component/helper.dart'; import '../component/widget.dart'; import '../extension/context_extensions.dart'; @@ -172,7 +174,8 @@ class _HabitsStatusChangerView extends State { defaultConfirmResult) : true; if (!mounted) return; - if (result) Navigator.of(context).pop(); + + if (result) dismissAllToolTips().then((_) => Navigator.pop(context)); } Widget _buildDebugInfo(BuildContext context) => From 3a4fa67f065532aaf3587087f498736b0f689105 Mon Sep 17 00:00:00 2001 From: Fries_I23 Date: Mon, 22 Apr 2024 15:44:28 +0800 Subject: [PATCH 2/2] fix: remove unnecessary import --- lib/view/page_habits_status_changer.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/view/page_habits_status_changer.dart b/lib/view/page_habits_status_changer.dart index 1f9fabd7..0e3b1e62 100644 --- a/lib/view/page_habits_status_changer.dart +++ b/lib/view/page_habits_status_changer.dart @@ -13,7 +13,6 @@ // limitations under the License. import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; import 'package:great_list_view/great_list_view.dart'; import 'package:provider/provider.dart'; import 'package:sliver_tools/sliver_tools.dart';