alibaba / alibaba/flutter_boost
[Bug]: 5.0.2 不兼容 PopScope
- Dominant language
- Dart
- Stars
- 7.2k
- Forks
- 1.3k
- PR merge metrics
- No merged PRs in 30d
Description
### 请描述遇到的问题,以及您所期望的正确的结果
在反复 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().pop(context); // 触发点
}
},
child: title == null ? _buildWebView() : _buildWebViewWithTitle(title),
);
}
Future _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. (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. (package:flutter_module/widgets/base_webview_widget.dart:149:39)
(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. (package:flutter_module/widgets/base_webview_widget.dart:149:39)
2024-09-03 15:49:38.415 24675-24802 flutter I ----------------------------------------------------
```
### 复现的平台
Both
### Flutter SDK版本
3.22.1
### FlutterBoost版本
5.0.2
### 是否延迟初始化FlutterBoost
No
### 解决方案
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with the failing stack traces in boost_container.dart, flutter_boost_app.dart, boost_navigator.dart, and base_webview_widget.dart, then reproduce the PopScope and delayed webview callback flow using Flutter 3.22.1 and FlutterBoost 5.0.2. Trace the interaction between maybePop, NavigatorState.pop, and the container page update. Done means repeated push/pop operations no longer trigger the reported assertions or subsequent Future and navigator-lock crashes.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- dart, flutter
- Domain
- mobile
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100