alibaba / alibaba/flutter_boost

调用BoostNavigator.instance.remove(pageInfo.uniqueId, arguments: ret)出现错误

Open
#1,644 7 comments 0 reactions 0 assignees View on GitHub
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.