鸿蒙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, 随后修改页面内容如下:

ts 复制代码
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 来自定义渲染内容。

修改原生页面

ts 复制代码
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 页面。

参考资料

相关推荐
全栈前端老曹6 分钟前
【前端路由】Vue Router 动态导入与懒加载 - 使用 () => import(‘...‘) 实现按需加载组件
前端·javascript·vue.js·性能优化·spa·vue-router·懒加载
Zyx200730 分钟前
构建现代 React 应用:从项目初始化到路由与数据获取
前端
大布布将军35 分钟前
☁️ 自动化交付:CI/CD 流程与云端部署
运维·前端·程序人生·ci/cd·职场和发展·node.js·自动化
LYFlied35 分钟前
Vue.js 中的 XSS 攻击防护机制详解
前端·vue.js·xss
七宝三叔40 分钟前
C#,为什么要用LINQ?
前端
七宝三叔41 分钟前
用「点外卖」的例子讲透HttpClient
前端
C_心欲无痕1 小时前
nodejs - pnpm解决幽灵依赖
前端·缓存·npm·node.js
二等饼干~za8986681 小时前
GEO优化---关键词搜索排名源码开发思路分享
大数据·前端·网络·数据库·django
韩曙亮1 小时前
【Web APIs】移动端轮播图案例 ( 轮播图自动播放 | 设置无缝衔接滑动 | 手指滑动轮播图 | 完整代码示例 )
前端·javascript·css·html·轮播图·移动端·web apis
犬大犬小1 小时前
Web 渗透:如何绕过403 Forbidden? Part I
前端·安全性测试·web 安全