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

鸿蒙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://www.lryc.cn/news/2385390.html

相关文章:

  • APM32小系统键盘PCB原理图设计详解
  • 【C/C++】多线程开发:wait、sleep、yield全解析
  • uint8_t是什么数据类型?
  • SystemUtils:你的Java系统“探照灯“——让环境探测不再盲人摸象
  • 对象存储(Minio)使用
  • yolov11使用记录(训练自己的数据集)
  • 历史数据分析——宁波港
  • 知识宇宙:技术文档该如何写?
  • DeepSeek 赋能数字农业:从智慧种植到产业升级的全链条革新
  • 技嘉主板怎么开启vt虚拟化功能_技嘉主板开启vt虚拟化教程(附intel和amd开启方法)
  • Java 并发编程高级技巧:CyclicBarrier、CountDownLatch 和 Semaphore 的高级应用
  • PT5F2307触摸A/D型8-Bit MCU
  • 矩阵方程$Ax=b$的初步理解.
  • 线性代数中的向量与矩阵:AI大模型的数学基石
  • [特殊字符] 使用增量同步+MQ机制将用户数据同步到Elasticsearch
  • LeetCode 2942.查找包含给定字符的单词:使用库函数完成
  • 【mediasoup】MS_DEBUG_DEV 等日志形式转PLOG输出
  • 打卡第27天:函数的定义与参数
  • python训练营day34
  • 人工智能在医疗影像诊断上的最新成果:更精准地识别疾病
  • 塔能节能平板灯:点亮苏州某零售工厂节能之路
  • 3DMAX插件UV工具UV Tools命令参数详解
  • Docker 与微服务架构:从单体应用到容器化微服务的迁移实践
  • 《岁月深处的童真》
  • 文件夹图像批处理教程
  • RL电路的响应
  • 30-消息队列
  • 跨域解决方案之JSONP
  • 【AI测试革命】第七期:AI性能测试的深度实践——从智能建模到自动化调优的全链路升级
  • Thinkphp6使用token+Validate验证防止表单重复提交