Skip to content

Commit 04f44f6

Browse files
committed
Revert: "[ohos,dart]native侧取消业务自定义实现RouterOptions,优化页面返回传参接口易用性,修复native页面返回flutter页面时传参可能失败的问题"
Reason: 该修改有bread change,暂时回滚 This reverts commit 8412c44.
1 parent 85d82f8 commit 04f44f6

File tree

12 files changed

+89
-75
lines changed

12 files changed

+89
-75
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
5. [dart]优化PlatformView示例代码
77
6. [dart]增加隐藏platformview的示例代码
88
7. [dart]补充完善图片格式测试案例
9+
8. Revert: "[ohos,dart]native侧取消业务自定义实现RouterOptions,优化页面返回传参接口易用性..."
910

1011
## 4.5.11
1112
1. [dart]添加`SystemChrome.setPreferredOrientations`测试案例

example/ohos/entry/src/main/ets/entryability/EntryAbility.ets

+8-3
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import {
3535
import { FlutterManager} from '@ohos/flutter_ohos';
3636
import ApplicationInfoLoader from '@ohos/flutter_ohos/src/main/ets/embedding/engine/loader/ApplicationInfoLoader';
3737
import { GeneratedPluginRegistrant } from '../plugins/GeneratedPluginRegistrant';
38-
import { RouterModule } from '../router/RouterModule';
38+
import { RouterModule, RouterOptions } from '../router/RouterModule';
3939
import { RouterNameConstants } from '../constants/RouterConstants';
4040
import { SimpleTextViewFactory } from '../platform_view/SimpleTextViewFactory';
4141

@@ -44,7 +44,10 @@ export default class EntryAbility extends UIAbility implements FlutterBoostDeleg
4444

4545
// 打开原生页面
4646
pushNativeRoute(options: FlutterBoostRouteOptions, onPageResult?: (pageName: string, result: Record<string, Object>) => void) {
47-
RouterModule.push(options.getPageName(), options.getArguments(), onPageResult);
47+
RouterModule.push(RouterNameConstants.NATIVE_PAGE, new RouterOptions(
48+
/*"native"*/options.getPageName(),
49+
options.getArguments(),
50+
/*null*/options.getUniqueId()), onPageResult);
4851
}
4952

5053
// 打开flutter页面
@@ -54,7 +57,9 @@ export default class EntryAbility extends UIAbility implements FlutterBoostDeleg
5457
routerName = RouterNameConstants.FLUTTER_DIALOG
5558
}
5659

57-
RouterModule.push(routerName, options, onPageResult);
60+
RouterModule.push(routerName, new RouterOptions(options.getPageName(),
61+
options.getArguments(),
62+
options.getUniqueId()), onPageResult);
5863
}
5964

6065
// 关闭flutter页面

example/ohos/entry/src/main/ets/pages/EntryPage.ets

+11-19
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,12 @@
2424

2525
import hilog from '@ohos.hilog';
2626
import promptAction from '@ohos.promptAction'
27-
import {
28-
FlutterBoost,
29-
FlutterBoostRouteOptions,
30-
FlutterBoostRouteOptionsBuilder } from 'flutter_boost';
27+
import { FlutterBoost } from 'flutter_boost';
3128
import { FlutterUIComponent } from './FlutterUIComponent';
3229
import { FlutterUIPage } from './FlutterUIPage';
3330
import { FlutterUIDialog } from './FlutterUIDialog';
3431
import { NativePage } from './NativePage';
35-
import { RouterModule } from '../router/RouterModule';
32+
import { RouterModule, RouterOptions } from '../router/RouterModule';
3633
import { RouterNameConstants } from '../constants/RouterConstants';
3734

3835
const TAG: string = "EntryPage";
@@ -64,15 +61,13 @@ struct EntryPage {
6461
}.width('100%')
6562
}
6663

67-
@Builder routerMap(builderName: string, options: ESObject) {
64+
@Builder routerMap(builderName: string, routerOptions: RouterOptions) {
6865
if (builderName == RouterNameConstants.FLUTTER_PAGE) {
69-
FlutterUIPage({ routerOptions: (options as FlutterBoostRouteOptions) })
66+
FlutterUIPage({ routerOptions: routerOptions })
7067
} else if (builderName == RouterNameConstants.FLUTTER_DIALOG) {
71-
FlutterUIDialog({ routerOptions: (options as FlutterBoostRouteOptions) })
68+
FlutterUIDialog({ routerOptions: routerOptions })
7269
} else {
73-
//无论是从dart侧打开native页面还是从native侧打开native页面,都需要在此对builderName(也就是pageName)再次进行分支判断然后选择相应的native页面,
74-
//由于example中只有一个额外的native页面,所以在此不过多展开示范
75-
NativePage({ params: options ? (options as Record<string, Object>) : {} })
70+
NativePage({ params: routerOptions ? routerOptions.params : {} })
7671
}
7772
}
7873

@@ -99,9 +94,10 @@ struct EntryPage {
9994
.margin({ bottom: 20 })
10095
.onClick(() => {
10196
try {
102-
RouterModule.push(RouterNameConstants.NATIVE_PAGE,
97+
RouterModule.push(RouterNameConstants.NATIVE_PAGE, new RouterOptions(
98+
"native",
10399
{ "message": "A Message From Native" },
104-
(pageName: string, result: Record<string, Object>) => {
100+
null), (pageName: string, result: Record<string, Object>) => {
105101
this.onPageResult(pageName, result)
106102
});
107103
} catch (err) {
@@ -137,15 +133,11 @@ struct EntryPage {
137133
}.tabBar(this.tabBuilder(0, 'Home'))
138134
// 2. Index
139135
TabContent() {
140-
FlutterUIComponent({ routerOptions: new FlutterBoostRouteOptionsBuilder() //请勿在此对uniqueId进行赋值
141-
.setPageName('flutterPage')
142-
.build() })
136+
FlutterUIComponent({ uri: 'flutterPage' })
143137
}.tabBar(this.tabBuilder(1, 'Index'))
144138
// 3. MediaQuery
145139
TabContent() {
146-
FlutterUIComponent({ routerOptions: new FlutterBoostRouteOptionsBuilder() //请勿在此对uniqueId进行赋值
147-
.setPageName('mediaquery')
148-
.build() })
140+
FlutterUIComponent({ uri: 'mediaquery' })
149141
}.tabBar(this.tabBuilder(2, 'MediaQuery'))
150142
// 4. ArkUI
151143
TabContent() {

example/ohos/entry/src/main/ets/pages/FlutterUIComponent.ets

+13-9
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import Curves from '@ohos.curves'
22
import hilog from '@ohos.hilog';
3-
import { FlutterBoostEntry, FlutterBoostRouteOptions } from 'flutter_boost';
3+
import { FlutterBoostEntry } from 'flutter_boost';
44
import { FlutterPage, FlutterView } from '@ohos/flutter_ohos';
55

66
const TAG: string = "FlutterUIComponent";
77
@Component
88
export struct FlutterUIComponent {
9-
@Prop routerOptions: FlutterBoostRouteOptions;
9+
@Prop uri: string;
10+
@Prop params: Record<string, Object> = {};
1011
@Prop xComponentType: XComponentType = XComponentType.SURFACE;
1112

1213
private flutterEntry: FlutterBoostEntry | null = null;
@@ -16,28 +17,31 @@ export struct FlutterUIComponent {
1617
.combine(TransitionEffect.move(TransitionEdge.END)).animation({curve: Curves.springMotion()});
1718

1819
async aboutToAppear() {
19-
hilog.info(0x0000, TAG, 'Component(#%{public}s) aboutToAppear===', this.routerOptions!.getPageName());
20-
this.flutterEntry = new FlutterBoostEntry(getContext(this), this.routerOptions, false, () => {
21-
// Do nothing: The top-level tab page does not respond to the back gesture.
22-
});
20+
hilog.info(0x0000, TAG, 'Component(#%{public}s) aboutToAppear===', this.uri);
21+
this.flutterEntry = new FlutterBoostEntry(getContext(this),
22+
{ uri: this.uri, params: this.params },
23+
false,
24+
() => {
25+
// Do nothing: The top-level tab page does not respond to the back gesture.
26+
});
2327
await this.flutterEntry.aboutToAppear();
2428
// The |aboutToAppear| method is called first,
2529
// followed by the |getFlutterView| method.
2630
this.flutterView = this.flutterEntry.getFlutterView();
2731
}
2832

2933
aboutToDisappear() {
30-
hilog.info(0x0000, TAG, 'Component(#%{public}s) aboutToDisappear===', this.routerOptions!.getPageName());
34+
hilog.info(0x0000, TAG, 'Component(#%{public}s) aboutToDisappear===', this.uri);
3135
this.flutterEntry?.aboutToDisappear()
3236
}
3337

3438
onPageShow() {
35-
hilog.info(0x0000, TAG, 'Component(#%{public}s) onPageShow===', this.routerOptions!.getPageName());
39+
hilog.info(0x0000, TAG, 'Component(#%{public}s) onPageShow===', this.uri);
3640
this.flutterEntry?.onPageShow()
3741
}
3842

3943
onPageHide() {
40-
hilog.info(0x0000, TAG, 'Component(#%{public}s) onPageHide===', this.routerOptions!.getPageName());
44+
hilog.info(0x0000, TAG, 'Component(#%{public}s) onPageHide===', this.uri);
4145
this.flutterEntry?.onPageHide()
4246
}
4347

example/ohos/entry/src/main/ets/pages/FlutterUIDialog.ets

+3-2
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,17 @@
2424

2525
import Curves from '@ohos.curves'
2626
import hilog from '@ohos.hilog';
27-
import { FlutterBoostEntry, FlutterBoostRouteOptions } from 'flutter_boost';
27+
import { FlutterBoostEntry } from 'flutter_boost';
2828
import { FlutterPage, FlutterView } from '@ohos/flutter_ohos';
29+
import { RouterOptions } from '../router/RouterModule';
2930

3031
const TAG: string = "FlutterUIDialog";
3132
@Component
3233
export struct FlutterUIDialog {
3334
private flutterEntry: FlutterBoostEntry | null = null;
3435
private flutterView: FlutterView | null = null;
3536
@Prop xComponentType: XComponentType = XComponentType.SURFACE;
36-
@Prop routerOptions: FlutterBoostRouteOptions;
37+
@Prop routerOptions: RouterOptions;
3738
private effect: object =
3839
TransitionEffect.OPACITY
3940
.combine(TransitionEffect.move(TransitionEdge.BOTTOM)).animation({curve: Curves.springMotion()});

example/ohos/entry/src/main/ets/pages/FlutterUIPage.ets

+3-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@
2323
*/
2424

2525
import hilog from '@ohos.hilog';
26-
import { FlutterBoostEntry, FlutterBoostRouteOptions } from 'flutter_boost';
26+
import { FlutterBoostEntry } from 'flutter_boost';
2727
import { FlutterPage, FlutterView } from '@ohos/flutter_ohos';
28+
import { RouterOptions } from '../router/RouterModule';
2829

2930
const TAG: string = "FlutterUIPage";
3031
@Component
@@ -33,7 +34,7 @@ export struct FlutterUIPage {
3334
private flutterView: FlutterView | null = null;
3435
private routeStack: NavPathStack | null = null;
3536
@Prop xComponentType: XComponentType = XComponentType.SURFACE;
36-
@Prop routerOptions: FlutterBoostRouteOptions;
37+
@Prop routerOptions: RouterOptions;
3738

3839
onPopCallback(result: Record<string, Object>): void {
3940
hilog.info(0x0000, TAG, "onPopCallback===");

example/ohos/entry/src/main/ets/pages/NativePage.ets

+9-11
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@
2222
* THE SOFTWARE.
2323
*/
2424
import hilog from '@ohos.hilog';
25+
import { FlutterBoostRouteResult } from 'flutter_boost';
2526

2627
import promptAction from '@ohos.promptAction'
27-
import { FlutterBoost, FlutterBoostRouteOptionsBuilder } from 'flutter_boost';
28+
import { FlutterBoost } from 'flutter_boost';
2829
import { FlutterUIComponent } from './FlutterUIComponent';
29-
import { RouterModule } from '../router/RouterModule';
30+
import { RouterModule, RouterOptions } from '../router/RouterModule';
3031
import { RouterNameConstants } from '../constants/RouterConstants';
3132

3233
const TAG: string = "NativePage";
@@ -86,9 +87,10 @@ export struct NativePage {
8687
.margin({ bottom: 20 })
8788
.onClick(() => {
8889
try {
89-
RouterModule.push(RouterNameConstants.NATIVE_PAGE,
90+
RouterModule.push(RouterNameConstants.NATIVE_PAGE, new RouterOptions(
91+
"native",
9092
{ "message": "A Message From Native" },
91-
(pageName: string, result: Record<string, Object>) => {
93+
null), (pageName: string, result: Record<string, Object>) => {
9294
this.onPageResult(pageName, result)
9395
});
9496
} catch (err) {
@@ -119,15 +121,11 @@ export struct NativePage {
119121
}.tabBar(this.tabBuilder(0, 'Home'))
120122
// 2. Index
121123
TabContent() {
122-
FlutterUIComponent({ routerOptions: new FlutterBoostRouteOptionsBuilder() //请勿在此对uniqueId进行赋值
123-
.setPageName('flutterPage')
124-
.build() })
124+
FlutterUIComponent({ uri: 'flutterPage' })
125125
}.tabBar(this.tabBuilder(1, 'Index'))
126126
// 3. MediaQuery
127127
TabContent() {
128-
FlutterUIComponent({ routerOptions: new FlutterBoostRouteOptionsBuilder() //请勿在此对uniqueId进行赋值
129-
.setPageName('mediaquery')
130-
.build() })
128+
FlutterUIComponent({ uri: 'mediaquery' })
131129
}.tabBar(this.tabBuilder(2, 'MediaQuery'))
132130
// 4. ArkUI
133131
TabContent() {
@@ -153,7 +151,7 @@ export struct NativePage {
153151
.hideTitleBar(true)
154152
.onBackPressed(() => {
155153
hilog.info(0x0000, TAG, "onBackPressed===");
156-
RouterModule.pop({ "message": "pop from a native page" });
154+
this.routeStack?.pop(new FlutterBoostRouteResult({ "message": "pop from a native page" }));
157155
return true
158156
})
159157
.onAppear(() => {

example/ohos/entry/src/main/ets/router/RouterModule.ets

+17-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,15 @@
1-
import { FlutterBoostRouteOptions } from 'flutter_boost';
1+
import { FlutterBoostRouteResult } from 'flutter_boost';
2+
3+
export class RouterOptions {
4+
constructor(uri: string, params: Record<string, Object>, uniqueId: string | null) {
5+
this.uri = uri;
6+
this.params = params;
7+
this.uniqueId = uniqueId;
8+
}
9+
uri: string;
10+
params: Record<string, Object>;
11+
uniqueId: string | null = null; //业务自定义路由参数中需要包含uniqueId,避免丢失dart侧传过来的uniqueId
12+
}
213

314
export class RouterModule {
415
static routeStack: NavPathStack | null = null;
@@ -7,13 +18,12 @@ export class RouterModule {
718
RouterModule.routeStack = stack;
819
}
920

10-
public static push(name: string, options: ESObject = {}, onPageResult?: (pageName: string, result: Record<string, Object>) => void): void {
21+
public static push(name: string, routerOptions?: RouterOptions, onPageResult?: (pageName: string, result: Record<string, Object>) => void): void {
1122
if (RouterModule.routeStack != null) {
12-
RouterModule.routeStack.pushPath({name: name, param: options, onPop: (popInfo: PopInfo) => {
23+
RouterModule.routeStack.pushPath({name: name, param: routerOptions, onPop: (popInfo: PopInfo) => {
1324
if (onPageResult) {
14-
//如果前一页面是flutter页面,请务必将popInfo.result的类型转换成Record<string, Object> !!!
15-
onPageResult((options instanceof FlutterBoostRouteOptions) ? (options as FlutterBoostRouteOptions).getPageName() : name,
16-
(popInfo && popInfo.result) ? (popInfo.result as Record<string, Object>) : ({} as Record<string, Object>));
25+
onPageResult(routerOptions ? routerOptions.uri : "native",
26+
(popInfo && popInfo.result) ? ((popInfo.result as FlutterBoostRouteResult).result) : ({} as Record<string, Object>));
1727
}
1828
}});
1929
} else {
@@ -23,7 +33,7 @@ export class RouterModule {
2333

2434
public static pop(result: Record<string, Object> = {}): void {
2535
if (RouterModule.routeStack != null) {
26-
RouterModule.routeStack.pop(result);
36+
RouterModule.routeStack.pop(new FlutterBoostRouteResult(result));
2737
} else {
2838
throw new Error('routeStack is null!');
2939
}

lib/src/flutter_boost_app.dart

+2-11
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,6 @@ class FlutterBoostAppState extends State<FlutterBoostApp> {
8484

8585
late VoidCallback _lifecycleStateListenerRemover;
8686

87-
/// A list of native page's 'Key' who are opened by dart side
88-
final List<String> _nativePageKeys = <String>[];
89-
90-
/// To get the last one in the _nativePageKeys list
91-
String get _topNativePage => _nativePageKeys.last;
92-
9387
@override
9488
void initState() {
9589
assert(
@@ -615,16 +609,13 @@ class FlutterBoostAppState extends State<FlutterBoostApp> {
615609
final initiatorPage = topContainer?.topPage.pageInfo.uniqueId;
616610
final key = '$initiatorPage#$pageName';
617611
_pendingResult[key] = completer;
618-
_nativePageKeys.add(key);
619612
Logger.log('pendNativeResult, key:$key, size:${_pendingResult.length}');
620613
return completer.future;
621614
}
622615

623-
/// In boost's native side, should avoid calling this method when an outer_route's flutter page
624-
/// pops back to previous outer_route's flutter page.
625616
void onNativeResult(CommonParams params) {
626-
final key = _topNativePage;
627-
_nativePageKeys.remove(key);
617+
final initiatorPage = topContainer?.topPage.pageInfo.uniqueId;
618+
final key = '$initiatorPage#${params.pageName}';
628619
if (_pendingResult.containsKey(key)) {
629620
_pendingResult[key]!.complete(params.arguments);
630621
_pendingResult.remove(key);

ohos/index.ets

+4-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ import FlutterBoostRouteOptions, {
3434
} from './src/main/ets/components/FlutterBoostRouteOptions';
3535

3636
import FlutterBoostAbility from './src/main/ets/components/containers/FlutterBoostAbility';
37-
import FlutterBoostEntry from './src/main/ets/components/containers/FlutterBoostEntry';
37+
import FlutterBoostEntry, {
38+
FlutterBoostRouteResult
39+
} from './src/main/ets/components/containers/FlutterBoostEntry';
3840
import { FlutterBoostPage } from './src/main/ets/components/containers/FlutterBoostPage';
3941
import CommonParams from './src/main/ets/components/messages/CommonParams';
4042

@@ -47,6 +49,7 @@ export {
4749
FlutterBoostSetupOptionsBuilder,
4850
FlutterBoostRouteOptions,
4951
FlutterBoostRouteOptionsBuilder,
52+
FlutterBoostRouteResult,
5053
FlutterBoostEntry,
5154
FlutterBoostPage,
5255
}

0 commit comments

Comments
 (0)