alibaba / alibaba/flutter_boost
调用BoostNavigator.instance.remove(pageInfo.uniqueId, arguments: ret)出现错误
- Dominant language
- Dart
- Stars
- 7.2k
- Forks
- 1.3k
- PR merge metrics
- No merged PRs in 30d
Description
**Flutter Boost Version** 3.0-null-safety-release.1
**Target Platform:** Android/iOS
FlutterA页面跳转到FlutterB页面,然后通过eventbus发送消息,让FlutterA页面关闭自身。使用的是下面的方法:
```dart
/// 关闭当前的Flutter页面
static void closeCurrentPage(BuildContext ctx, {Map? ret}) {
PageInfo? pageInfo = BoostNavigator.instance.getPageInfoByContext(ctx);
if (pageInfo != null) {
BoostNavigator.instance.remove(pageInfo.uniqueId, arguments: ret);
}
}
```
然后报错,见日志
## Logs
```
[ +14 ms] I/flutter ( 2933): Caught error: type '_InternalLinkedHashMap' is not a subtype of type 'Map?' in type cast
[ +6 ms] I/flutter ( 2933): Caught stackTrace: #0 FlutterBoostAppState._removeContainer (package:flutter_boost/src/flutter_boost_app.dart:530:52)
[ ] I/flutter ( 2933): #1 FlutterBoostAppState.pop (package:flutter_boost/src/flutter_boost_app.dart:468:15)
[ ] I/flutter ( 2933): #2 FlutterBoostAppState.removeWithResult (package:flutter_boost/src/flutter_boost_app.dart:391:18)
[ ] I/flutter ( 2933): #3 BoostNavigator.remove (package:flutter_boost/src/boost_navigator.dart:107:17)
```
具体报错原因,_removeContainer内部对Map进行了强转(flutter_boost_app.dart):
```dart
Future _removeContainer(BoostContainer container) async {
if (container.pageInfo.withContainer!) {
Logger.log('_removeContainer , uniqueId=${container.pageInfo.uniqueId}');
final params = CommonParams()
..pageName = container.pageInfo.pageName
..uniqueId = container.pageInfo.uniqueId
..arguments = container.pageInfo.arguments as Map?;
return await _nativeRouterApi!.popRoute(params);
}
}
```
而pageInfo的定义:
```dart
/// The PageInfo use in FlutterBoost ,it is not a public api
class PageInfo {
PageInfo({this.pageName, this.uniqueId, this.arguments, this.withContainer});
bool? withContainer;
String? pageName;
String? uniqueId;
Map? arguments;
}
```
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with FlutterBoostAppState._removeContainer in flutter_boost_app.dart, then follow the call chain through pop, removeWithResult, and BoostNavigator.remove. Reproduce the reported call with a Map result and verify that removing a page no longer raises the logged type-cast error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- dart, flutter
- Domain
- mobile
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 35/100