HarmonyOS 鸿蒙Next集成fluter boost pop无法收到数据
HarmonyOS 鸿蒙Next集成fluter boost pop无法收到数据 鸿蒙集成fluter boost,flutter跳转页面采用withContainer 为true的形式后,flutter 页面pop后数据回传不到其他flutter页面。
Ability的配置如下
export default class EntryAbility extends UIAbility implements FlutterBoostDelegate{
pushNativeRoute(options: FlutterBoostRouteOptions,
onPageResult?: ((pageName: string, result: Record<string, Object>) => void) | undefined): void {
throw new Error(‘Method not implemented.’);
}
pushFlutterRoute(options: FlutterBoostRouteOptions,
onPageResult?: ((pageName: string, result: Record<string, Object>) => void) | undefined): void {
// throw new Error(‘Method not implemented.’);
router.pushUrl({
url: ‘pages/AppFlutterPage’, params: {
uri: options.getPageName(),
params: JSONUtil.toString(options.getArguments()),
}
}).then(() => {
console.info(‘Succeeded in jumping to the second page.’)
})
}
popRoute(options: FlutterBoostRouteOptions): boolean {
// 获取当前页面名称
const pageName = options.getPageName();
const value = options.getArguments();
entryLogger.debug(Pop route called for page: ${pageName}
)
// router.back({
// url: "pages/Index",
// params: value
// });
return false
}
我的容器是这个
@Entry @Component struct AppFlutterPage { private flutterEntry?: FlutterBoostEntry; private flutterView?: FlutterView
aboutToAppear() { let option = router.getParams() as RouterOptions let params = option.params; this.flutterEntry = new FlutterBoostEntry(getContext(this), { uri: option.uri, params: JSON.parse(params as string) }) this.flutterEntry?.aboutToAppear() this.flutterView = this.flutterEntry?.getFlutterView() } aboutToDisappear() { this.flutterEntry?.aboutToDisappear() } onPageShow() { this.flutterEntry?.onPageShow() } onPageHide() { this.flutterEntry?.onPageHide() } onBackPress(): boolean | void { FlutterBoost.getInstance() .getPlugin()?.onBackPressed(); return true; }
build() { Column() { FlutterPage({ viewId: this.flutterView?.getId() }) .width(‘100%’) .height(‘100%’) } .width(‘100%’) .height(‘100%’) } }
flutter跳转代码如下
var data = await BoostNavigator.instance.push(
Routes.contentFilteringPage,
arguments: {"categorys" : widget.categorys?.map((e) => e.toJson()).toList(),
// "selectContentFileter" : SelectContentFileter(categories,subCategories).toJson(),
"title":"热门推荐"} ,
withContainer: !AppConfig.isFlutterRun,
opaque: true
);
// 处理返回数据(确保是基本类型)
if (data != null && data is Map) {
setState(() {
categories = data['selectedCategoryIndex'];
subCategories = data['selectedSubCategoryIndex'];
_changeHeight();
});
_buttonClick();
_scrollToInitialPosition();
}
返回数据拿不到
更多关于HarmonyOS 鸿蒙Next集成fluter boost pop无法收到数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html
感谢您的提问,为了更快解决您的问题,麻烦请补充以下信息:复现代码(如最小复现demo)。
注:目前代码无法复现问题。
更多关于HarmonyOS 鸿蒙Next集成fluter boost pop无法收到数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
是不是pushFlutterRoute
没有将onPageResult
回调传递给鸿蒙路由系统导致无法接收返回数据?
路由回调------
pushFlutterRoute(options: FlutterBoostRouteOptions,
onPageResult?: (pageName: string, result: Record<string, Object>) => void): void {
router.pushUrl({
url: 'pages/AppFlutterPage',
params: {
uri: options.getPageName(),
params: JSONUtil.toString(options.getArguments()),
// 传递回调标识
callbackId: options.getUniqueId()
}
}).then(() => {
// 绑定回调到路由实例
if (onPageResult) {
FlutterBoost.getInstance().registerPageResultObserver(
options.getUniqueId(),
(result: Record<string, Object>) => onPageResult(options.getPageName(), result)
);
}
})
}
然后再看一下popRoute
方法是否执行页面关闭操作,仅返回false
导致数据无法传递。
页面关闭逻辑------
popRoute(options: FlutterBoostRouteOptions): boolean {
// 执行实际页面返回操作
router.back({
url: "pages/AppFlutterPage",
params: options.getArguments()
});
return true; // 必须返回true表示已处理
}
在HarmonyOS Next中,Flutter Boost的pop操作无法接收数据,通常是由于页面路由栈管理机制差异导致。鸿蒙的方舟框架与Flutter Engine在跨页面数据回传时存在兼容性问题,数据可能被方舟的页面生命周期拦截或丢失。需检查Flutter Boost与HarmonyOS路由的对接实现,确保pop方法正确触发数据回调。
在HarmonyOS Next中集成Flutter Boost时,页面pop后无法接收返回数据的问题通常与路由管理和数据传递机制有关。根据您提供的代码,主要问题可能出现在popRoute
方法的实现上。
当前popRoute
方法返回false
,这表示路由未被处理,Flutter Boost无法正确传递返回数据。需要修改该方法以正确处理路由返回和数据传递:
popRoute(options: FlutterBoostRouteOptions): boolean {
const pageName = options.getPageName();
const result = options.getArguments();
// 通知Flutter Boost路由已处理,并传递返回数据
FlutterBoost.getInstance().getPlugin()?.onNativeResult(pageName, result);
// 执行实际的路由返回操作
router.back();
return true; // 返回true表示路由已处理
}
同时确保在Flutter侧的页面pop时正确传递数据:
// 在需要返回数据的页面
BoostNavigator.instance.pop({'selectedCategoryIndex': 1, 'selectedSubCategoryIndex': 2});
还需要检查pushFlutterRoute
方法中的onPageResult
回调是否正确设置,这是接收返回数据的关键机制。