flutter_boost
flutter_boost copied to clipboard
[Bug]: 5.0.2 不兼容 PopScope
请描述遇到的问题,以及您所期望的正确的结果
在反复 push pop 时,不引发 crash
请说明如何操作会遇到上述问题
同时点击 webview 内部的按钮打开新的 webview 页面,点击左上角返回按钮并使用flutter的路由maybePop,网页事件回调由于异步延迟,会在pop中途引发 crash。
在下面填入关键复现代码
@override
Widget build(BuildContext context) {
final title = widget.title;
return PopScope(
canPop: false,
onPopInvoked: (didPop) async {
if (kDebugMode) {
print('didPop is: $didPop');
}
if (didPop) {
return;
}
final shouldPop = await _onBack();
if (context.mounted && shouldPop) {
await GetIt.I<Navigation>().pop(context); // 触发点
}
},
child: title == null ? _buildWebView() : _buildWebViewWithTitle(title),
);
}
Future<bool> _onBack() async {
final backHandler = widget.backHandler;
if (backHandler != null) {
return backHandler(_webViewController);
}
return true;
}
appBar: AppBar(
backgroundColor: appTheme(context).generalBackground,
leading: IconButton(
icon:
Icon(Icons.arrow_back_ios, color: appTheme(context).textPrimary),
onPressed: Navigator.of(context).maybePop,// 返回按钮
),
),
核心crash
2024-09-03 15:49:33.812 24675-24802 flutter I ----------------FIREBASE CRASHLYTICS----------------
2024-09-03 15:49:33.812 24675-24802 flutter I 'package:flutter_boost/src/boost_container.dart': Failed assertion: line 127 pos 12: 'container.topPage == page': is not true.
2024-09-03 15:49:33.813 24675-24802 flutter I #0 _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:51:61)
#1 _AssertionError._throwNew (dart:core-patch/errors_patch.dart:40:5)
#2 BoostContainerState._updatePagesList (package:flutter_boost/src/boost_container.dart:127:12)
#3 BoostContainerState.build.<anonymous closure> (package:flutter_boost/src/boost_container.dart:161:15)
#4 NavigatorState.pop (package:flutter/src/widgets/navigator.dart:5280:28)
#5 NavigatorExtState.pop (package:flutter_boost/src/boost_container.dart:228:13)
#6 FlutterBoostAppState.pop (package:flutter_boost/src/flutter_boost_app.dart:517:34)
#7 FlutterBoostAppState.popWithResult (package:flutter_boost/src/flutter_boost_app.dart:394:18)
#8 BoostNavigator.pop (package:flutter_boost/src/boost_navigator.dart:113:28)
#9 FlutterBoostNavigator.pop (package:boost_navigator/flutter_boost_navigator.dart:37:36)
#10 _WebViewState.build.<anonymous closure> (package:flutter_module/widgets/base_webview_widget.dart:149:39)
<asynchro
2024-09-03 15:49:33.813 24675-24802 flutter I ----------------------------------------------------
crash 之后伴随的其他 crash:
2024-09-03 15:49:34.906 24675-24802 flutter I ----------------FIREBASE CRASHLYTICS----------------
2024-09-03 15:49:34.906 24675-24802 flutter I Bad state: Future already completed
2024-09-03 15:49:34.906 24675-24802 flutter I #0 _AsyncCompleter.complete (dart:async/future_impl.dart:43:31)
#1 Route.didComplete (package:flutter/src/widgets/navigator.dart:423:19)
#2 Route.didPop (package:flutter/src/widgets/navigator.dart:401:5)
#3 OverlayRoute.didPop (package:flutter/src/widgets/routes.dart:78:36)
#4 TransitionRoute.didPop (package:flutter/src/widgets/routes.dart:307:18)
#5 LocalHistoryRoute.didPop (package:flutter/src/widgets/routes.dart:869:18)
#6 BoostContainerState.build.<anonymous closure> (package:flutter_boost/src/boost_container.dart:159:23)
#7 NavigatorState.pop (package:flutter/src/widgets/navigator.dart:5280:28)
#8 NavigatorExtState.pop (package:flutter_boost/src/boost_container.dart:228:13)
#9 FlutterBoostAppState.pop (package:flutter_boost/src/flutter_boost_app.dart:517:34)
#10 FlutterBoostAppState.popWithResult (package:flutter_boost/src/flutter_boost_app.dart:394:18)
#11 BoostNavigator.pop (package:flutter_boost/src/boost_navigator.dart:113:28)
#12 Flutte
2024-09-03 15:49:34.906 24675-24802 flutter I ----------------------------------------------------
2024-09-03 15:49:38.415 24675-24802 flutter I ----------------FIREBASE CRASHLYTICS----------------
2024-09-03 15:49:38.415 24675-24802 flutter I 'package:flutter/src/widgets/navigator.dart': Failed assertion: line 5273 pos 12: '!_debugLocked': is not true.
2024-09-03 15:49:38.415 24675-24802 flutter I #0 _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:51:61)
#1 _AssertionError._throwNew (dart:core-patch/errors_patch.dart:40:5)
#2 NavigatorState.pop (package:flutter/src/widgets/navigator.dart:5273:12)
#3 NavigatorExtState.pop (package:flutter_boost/src/boost_container.dart:228:13)
#4 FlutterBoostAppState.pop (package:flutter_boost/src/flutter_boost_app.dart:517:34)
#5 FlutterBoostAppState.popWithResult (package:flutter_boost/src/flutter_boost_app.dart:394:18)
#6 BoostNavigator.pop (package:flutter_boost/src/boost_navigator.dart:113:28)
#7 FlutterBoostNavigator.pop (package:boost_navigator/flutter_boost_navigator.dart:37:36)
#8 _WebViewState.build.<anonymous closure> (package:flutter_module/widgets/base_webview_widget.dart:149:39)
<asynchronous suspension>
2024-09-03 15:49:38.415 24675-24802 flutter I ----------------------------------------------------
复现的平台
Both
Flutter SDK版本
3.22.1
FlutterBoost版本
5.0.2
是否延迟初始化FlutterBoost
No