当前位置: 首页 > 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://www.xdnf.cn/news/584335.html

相关文章:

  • [Flutter]Completer和compute
  • 计量单片机 RN8302:特性、使用与应用
  • 【人工智障生成日记1】从零开始训练本地小语言模型
  • 【无标题】西门子S7-1500PLC与西门子V90 PN伺服通讯控制项目程序项目程序,共有8轴,编码器信号直接输入到变频器内。
  • 系统架构设计(十八):ATAM
  • 《棒球百科》棒球运动规则·棒球1号位
  • 【竖排繁体识别】如何将竖排繁体图片文字识别转横排繁体,转横排简体导出文本文档,基于WPF和腾讯OCR的实现方案
  • 免费轻量便携截图 录屏 OCR 翻译四合一!提升办公效率
  • 解决weman框架redis报错:Class “llluminatelRedis\RedisManager“ not found
  • 【Java高阶面经:数据库篇】18、分布式事务:如何在分库分表中实现高性能与一致性?
  • 零基础设计模式——第二部分:创建型模式 - 原型模式
  • HCIP(广域网)
  • Normalized Blind Deconvolution论文阅读
  • UART串口两种连接方式
  • 笔记本6GB本地可跑的图生视频项目(FramePack)
  • EtpBot:安卓自动化脚本开发神器
  • 了解Android studio 初学者零基础推荐(2)
  • 正则表达式篇
  • element ui 表格实现单选
  • v2.0 技术篇目录-研究生如何选择编程技术
  • iOS工厂模式
  • uniapp-商城-65-shop(1-品牌信息显示,将数据库信息同步到vuex的state)
  • 如何构建一个简单的AI Agent(极简指南)
  • 深度学习入门到实战:用PyTorch打通数学、张量与模型训练全链路​
  • 使用 A2A Python SDK 实现 CurrencyAgent
  • 开闭原则 (Open/Closed Principle, OCP)
  • leetcode hot100刷题日记——10.螺旋矩阵
  • day33 python深度学习入门
  • jmeter登录接口生成一批token并写入csv文件
  • 浪潮Inspur服务器产品线概述