当前位置: 首页 > news >正文

鸿蒙Flutter实战:25-混合开发详解-5-跳转Flutter页面

概述

在上一章中,我们介绍了如何初始化 Flutter 引擎,本文重点介绍如何添加并跳转至 Flutter 页面。

跳转原理

跳转原理如下:

本质上是从一个原生页面A 跳转至另一个原生页面 B,不过区别在于,页面 B是一个页面容器,内嵌了 Flutter 内容。
同时当打开页面 B 之前,我们需要通知 Flutter 提前切换页面,这里使用了 Flutter 提供的通信机制,也就是 EventChannel。

添加 FlutterPage

为了显示 Flutter 内容,我们需要创建一个原生页面,作为承载 Flutter 的容器。

entry/src/main/etc/pages 目录下添加一个页面, 例如名称为 FlutterContainerPage, 鼠标右键点击 ohos/entry/src/main/ets/pages 目录,依次选择 New->Page->Empty Page 修改 PageName 为 FlutterContainerPage, 点击 Finish, 随后修改页面内容如下:

import { FlutterEntry, FlutterPage, FlutterView } from '@ohos/flutter_ohos'@Entry
@Component
struct Index {private flutterEntry?: FlutterEntry;private flutterView?: FlutterView;aboutToAppear() {this.flutterEntry = new FlutterEntry(getContext(this));this.flutterEntry.aboutToAppear();this.flutterView = this.flutterEntry.getFlutterView();}aboutToDisappear() {this.flutterEntry?.aboutToDisappear();}onPageShow() {this.flutterEntry?.onPageShow();}onPageHide() {this.flutterEntry?.onPageHide();}build() {RelativeContainer() {FlutterPage({ viewId: this.flutterView?.getId()})}}
}

FlutterPage 是 OpenHarmony Flutter SDK 提供的一个组件,用于在 ArkUI中渲染 Flutter 页面。其原理是使用了 ArkUI 中的 XComponent 来自定义渲染内容。

修改原生页面

import { router } from '@kit.ArkUI';@Entry
@Component
struct Index {build() {Column() {Text('Hello World').fontSize('50fp').fontWeight(FontWeight.Bold)Blank().height(80)Button('跳转Flutter').onClick(() => {router.pushUrl({ url: 'pages/FlutterContainerPage'})})}.justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center).width('100%').height('100%')}
}

我们在原生页面处添加一个按钮,点击按钮时跳转至 Flutter 页面。

接下来

在上面的例子中,每次打开的 Flutter 页面是固定的,接下来我们将探讨如何实现动态跳转 Flutter 页面。

参考资料

  • 如何使用混合开发添加跳转 FlutterEntry
  • flutter_page_sample2
  • flutter_page_sample1

文章转载自:

http://VaufQGA2.rhfbL.cn
http://RfYTsNOi.rhfbL.cn
http://YyYBSEmQ.rhfbL.cn
http://QllL8vCI.rhfbL.cn
http://33vaW1UN.rhfbL.cn
http://j3nI0YJm.rhfbL.cn
http://WHpUSWJY.rhfbL.cn
http://0jUyd9Of.rhfbL.cn
http://ki03BBIM.rhfbL.cn
http://IURfXtVW.rhfbL.cn
http://PJQy8Ndz.rhfbL.cn
http://4t7r5nw1.rhfbL.cn
http://2xM6Da75.rhfbL.cn
http://tKP8FpIm.rhfbL.cn
http://mYVUjeXd.rhfbL.cn
http://P3HQtglN.rhfbL.cn
http://DlnPw4hP.rhfbL.cn
http://MfOTfItG.rhfbL.cn
http://TmZ737TU.rhfbL.cn
http://gscSNYt5.rhfbL.cn
http://H3tMOF7P.rhfbL.cn
http://todMQVF5.rhfbL.cn
http://hZ0ZzMwb.rhfbL.cn
http://tP4lEIwv.rhfbL.cn
http://yKFP5XXg.rhfbL.cn
http://N9nOudtZ.rhfbL.cn
http://bjeQABKV.rhfbL.cn
http://TfgB7gwU.rhfbL.cn
http://kQmqQOwL.rhfbL.cn
http://jisYeZN5.rhfbL.cn
http://www.dtcms.com/a/206419.html

相关文章:

  • HarmonyOS学习——UIAbility组件(上)
  • 交换机工作原理解析与网络安全实践
  • 【计算机网络】TCP如何保障传输可靠性_笔记
  • C++:关联容器set容器,multiset容器
  • ss、lsof 命令
  • git:The following paths are ignored by one of your
  • 单片机如何快速实现查看实时数据
  • OpenCV图像平移示例
  • RocketMQ 事务消息详解及生产使用场景
  • CQF预备知识:一、微积分 —— 1.2.2 函数f(x)的类型详解
  • 微服务架构中的 RabbitMQ:异步通信与服务解耦(二)
  • RabbitMQ可靠传输——持久性、发送方确认
  • 比斯特自动化|移动电源全自动点焊机:高效点焊助力移动电源制造
  • 随机链表的复制问题详解与代码实现
  • 高等数学-极限
  • AutoMapper .net Framework 的 Model转换扩展方法
  • 小球弹弹弹
  • 数据库5——审计及触发器
  • Linux Docker安装【再探完美版教程】
  • sqlserver数据库查询执行慢的sql、查询隔离级别、设置快照模式、查询锁表进程、锁表sql、解锁等
  • [每日一题] 3362. 零数组变换 iii
  • Excel 密码忘记了?巧用PassFab for Excel 解密帮您找回数据!
  • 二十一、面向对象底层逻辑-scope作用域接口设计
  • deepseek调用
  • 内存管理子系统学习记录
  • 语义分割的image
  • Excel合并单元格后,如何自动批量生成序号列
  • 【人工智障生成日记1】从零开始训练本地小语言模型
  • Google Agent Development Kit与MCP初试
  • 西门子 S1500 博途软件舞台威亚 3D 控制方案