鸿蒙-flutter-使用FlutterEntry的路由管理和参数传递_下
前言
前面两篇介绍了如何打开指定页面,并且传递对应的参数。这一篇中我们来看下在页面返回时,如何将数据传递给上一个页面。
方案
按照之前的介绍,我们在flutter
打开native
时,也是通过methodChannel
调用原生的方法打开的对应页面,那么当原生页面返回的时候,也是会将数据放在HMRouterPathCallback
回调中返回。当我们获取到对应的数据之后,可以通过MethodResult
将数据返回给flutter
。
当flutter
页面返回时,需要先判断能不能由flutter
进行返回,不能返回的话再通过methodChannel
调用 native
返回。
实现
native页面返回
对于 native 页面返回,我们看一下上一篇中提到的 flutter 打开 native,在·EntryAbility·中调用的setRouterPushHandler
,当页面返回的时候,会回调HMRouterMgr.push
传入的HMRouterPathCallback
对象中的方法。我们来改造一下setRouterPushHandler
这个方法,将 MethodResult 对象也传过来,当页面返回的时候调用MethodResult.success将参数返回。
1 |
|
flutter页面返回
按照之前的介绍,flutter 返回也统一调用插件的返回方法。
在插件的FlutterRouterPlatform
中添加pop
方法:
1 |
|
在插件的MethodChannelFlutterRouter
中添加实现:
1 |
|
在插件的FlutterRouterPlugin
中添加调用,这里我们还是将返回的处理交给宿主项目决定
1 |
|
在插件的FlutterRouter
中统一调用返回的方法:先判断 flutter 是否可以 pop
1 |
|
为了测试简单全面,我们在 flutter_module中添加一个 flutter 页面。
1 |
|
注意,添加的页面需要在 flutter 侧注册一下
1 |
|
之后我们在LoginPage中添加一下相关跳转、返回、参数展示
1 |
|
这样我们在 flutter 中需要做的事情就已经做完了,执行flutter build har --debug
会在my_flutter_module/.ohos/har
文件夹下看到三个har文件,直接复制到鸿蒙工程中进行依赖就行了。记得把源码依赖删掉
1 |
|
最后一步,在EntryAbility
中设置一下处理返回的调用
1 |
|
这样我们就完成了页面返回时参数的传递。
结论
先看下效果
总结一下:
- native 打开 flutter 时,将参数拼接到初始化路径上。
- flutter 侧需要将所有的页面注册到插件中
- flutter 打开页面时,插件判断目标页面是 flutter 还是 native,选择对应的方法打开页面
- 页面返回时,通过 MethodResult 将数据返回
至此,鸿蒙和 flutter 混编的介绍就已经结束了。