组件导航 (HMRouter)+flutter项目搭建-混合开发+分栏效果

组件导航 (Navigation)+flutter项目搭建
接上一章flutter项目的环境变量配置并运行flutter

1.flutter创建项目并运行

flutter create fluter_hmrouter

进入ohos目录打开编辑器先自动签名

编译项目-生成签名包

flutter build hap --debug

运行项目

HMRouter搭建安装

1.安装oh-package.json5安装

{"dependencies": {"@hadss/hmrouter": "latest"},}

2.修改工程的hvigor/hvigor-config.json

“@hadss/hmrouter-plugin”: “latest”

在这里插入图片描述

3.修改每个模块的hvigorfile.ts

在这里插入图片描述
在这里插入图片描述

代码如下


// ./hvigorfile.ts  工程根目录的hvigorfile.ts
import { appTasks } from '@ohos/hvigor-ohos-plugin';export default {system: appTasks,plugins:[]
}// entry/hvigorfile.ts  entry模块的hvigorfile.ts
import { hapTasks } from '@ohos/hvigor-ohos-plugin';
import { hapPlugin } from '@hadss/hmrouter-plugin';export default {system: hapTasks,plugins: [hapPlugin()] // 使用HMRouter标签的模块均需要配置,与模块类型保持一致
}// libHar/hvigorfile.ts  libHar模块的hvigorfile.ts
import { harTasks } from '@ohos/hvigor-ohos-plugin';
import { harPlugin } from '@hadss/hmrouter-plugin';export default {system: harTasks,plugins:[harPlugin()]  // 使用HMRouter标签的模块均需要配置,与模块类型保持一致
}// libHsp/hvigorfile.ts  libHsp模块的hvigorfile.ts
import { hspTasks } from '@ohos/hvigor-ohos-plugin';
import { hspPlugin } from '@hadss/hmrouter-plugin';export default {system: hspTasks,plugins: [hspPlugin()]  // 使用HMRouter标签的模块均需要配置,与模块类型保持一致
}

4在工程目录下的build-profile.json5中,配置useNormalizedOHMUrl属性为true

在这里插入图片描述

{"app": {"products": [{"name": "default","signingConfig": "default","compatibleSdkVersion": "5.0.0(12)","runtimeOS": "HarmonyOS","buildOption": {"strictMode": {"useNormalizedOHMUrl": true}}}],// ...其他配置}
}

5新建启动页

创建/abilitystage/MyAbilityStage.ets文件
module.json5配置启动页

“srcEntry”: “./ets/abilitystage/MyAbilityStage.ets”,
在这里插入图片描述

import AbilityStage from '@ohos.app.ability.AbilityStage';
import { HMRouterMgr } from '@hadss/hmrouter';// 相当于Android的application, 在页面创建前执行一些初始化工作
export default class MyAbilityStage extends AbilityStage {onCreate(): void {console.log('[MyAbilityStage] onCreate1')HMRouterMgr.init({context: this.context})}
}

至此配置工作结束,以下是项目中使用

在这里插入图片描述
入口文件配置
Index.ets

import { HMDefaultGlobalAnimator, HMNavigation } from '@hadss/hmrouter';
import common from '@ohos.app.ability.common';import { AttributeUpdater } from '@kit.ArkUI';let storage = LocalStorage.getShared()class LayoutModifier extends AttributeUpdater<NavigationAttribute> {initializeModifier(instance: NavigationAttribute): void {instance.backgroundColor('#EFEFEF');instance.mode(NavigationMode.Auto);}
}@Entry(storage)
@Component
struct Index {modifier: LayoutModifier = new LayoutModifier();build() {Column() {HMNavigation({navigationId: 'mainNavigationId',homePageUrl: 'HomeContent',options: {standardAnimator: HMDefaultGlobalAnimator.STANDARD_ANIMATOR,dialogAnimator: HMDefaultGlobalAnimator.DIALOG_ANIMATOR,modifier: this.modifier}});}}}

FlutterPage.ets

import { HMRouter, HMRouterMgr } from "@hadss/hmrouter"
import { FlutterPage } from '@ohos/flutter_ohos'
import { common } from "@kit.AbilityKit";const EVENT_BACK_PRESS = 'EVENT_BACK_PRESS'@HMRouter({ pageUrl: 'FlutterContent', singleton: true})
@Component
export struct FlutterContent {@LocalStorageLink('viewId') viewId: string = "";private context = getContext(this) as common.UIAbilityContextonBackPress(): boolean {this.context.eventHub.emit(EVENT_BACK_PRESS)return true}build() {Column() {Text('首页')Button('点击到flutter页面').margin({top: 20}).onClick(()=>{HMRouterMgr.push({ pageUrl: 'FlutterContent' });})FlutterPage({ viewId: this.viewId })}}
}

HomeContent.ets

import { HMNavigation, HMRouter, HMRouterMgr } from "@hadss/hmrouter";
import { AttributeUpdater } from "@kit.ArkUI";class LayoutModifier extends AttributeUpdater<NavigationAttribute> {initializeModifier(instance: NavigationAttribute): void {instance.backgroundColor('#EFEFEF');instance.mode(NavigationMode.Auto);}
}@HMRouter({ pageUrl: "HomeContent", singleton: true })
@Component
export struct split {navigationId = 'NavigationLayoutNavigationId';modifier: LayoutModifier = new LayoutModifier();build() {HMNavigation({navigationId: this.navigationId,options: {modifier: this.modifier}}) {// 左边区域Button('点击跳转flutter').onClick(()=>{HMRouterMgr.push({ pageUrl: 'FlutterContent',param:{url:"https://agreement-drcn.hispace.dbankcloud.cn/index.html?lang=zh&agreementId=1655720346340328704"}});}).margin({top:20})Button('点击跳转其他页面').onClick(()=>{HMRouterMgr.push({ pageUrl: 'OtherPage'});}).margin({top:20})};}
}

OtherPage.ets

import { HMRouter, HMRouterMgr } from "@hadss/hmrouter"@HMRouter({ pageUrl: 'OtherPage', singleton: true})
@Component
export struct OtherPage {build() {Column() {Text('其他页面')}}
}

分栏效果图如下

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

城市排水管网流量监测系统解决方案

一、方案背景 随着工业的不断发展和城市人口的急剧增加&#xff0c;工业废水和城市污水的排放量也大量增加。目前&#xff0c;我国已成为世界上污水排放量大、增加速度快的国家之一。然而&#xff0c;总体而言污水处理能力较低&#xff0c;有相当部分未经处理的污水直接或间接排…

TCP/IP 知识体系

TCP/IP 知识体系 一、TCP/IP 定义 全称&#xff1a;Transmission Control Protocol/Internet Protocol&#xff08;传输控制协议/网际协议&#xff09;核心概念&#xff1a; 跨网络实现信息传输的协议簇&#xff08;包含 TCP、IP、FTP、SMTP、UDP 等协议&#xff09;因 TCP 和…

5G行业专网部署费用详解:投资回报如何最大化?

随着数字化转型的加速&#xff0c;5G行业专网作为企业提升生产效率、保障业务安全和实现智能化管理的重要基础设施&#xff0c;正受到越来越多行业客户的关注。部署5G专网虽然前期投入较大&#xff0c;但通过合理规划和技术选择&#xff0c;能够实现投资回报的最大化。 在5G行…

网页工具-OTU/ASV表格物种分类汇总工具

AI辅助下开发了个工具&#xff0c;功能如下&#xff0c;分享给大家&#xff1a; 基于Shiny开发的用户友好型网页应用&#xff0c;专为微生物组数据分析设计。该工具能够自动处理OTU/ASV_taxa表格&#xff08;支持XLS/XLSX/TSV/CSV格式&#xff09;&#xff0c;通过调用QIIME1&a…

【超分辨率专题】一种考量视频编码比特率优化能力的超分辨率基准

这是一个Benchmark&#xff0c;超分辨率视频编码&#xff08;2024&#xff09; 专题介绍一、研究背景二、相关工作2.1 SR的发展2.2 SR benchmark的发展 三、Benchmark细节3.1 数据集制作3.2 模型选择3.3 编解码器和压缩标准选择3.4 Benchmark pipeline3.5 质量评估和主观评价研…

保姆教程-----安装MySQL全过程

1.电脑从未安装过mysql的&#xff0c;先找到mysql官网&#xff1a;MySQL :: Download MySQL Community Server 然后下载完成后&#xff0c;找到文件&#xff0c;然后双击打开 2. 选择安装的产品和功能 依次点开“MySQL Servers”、“MySQL Servers”、“MySQL Servers 5.7”、…

【React中函数组件和类组件区别】

在 React 中,函数组件和类组件是两种构建组件的方式,它们在多个方面存在区别,以下详细介绍: 1. 语法和定义 类组件:使用 ES6 的类(class)语法定义,继承自 React.Component。需要通过 this.props 来访问传递给组件的属性(props),并且通常要实现 render 方法返回 JSX…

[基础] HPOP、SGP4与SDP4轨道传播模型深度解析与对比

HPOP、SGP4与SDP4轨道传播模型深度解析与对比 文章目录 HPOP、SGP4与SDP4轨道传播模型深度解析与对比第一章 引言第二章 模型基础理论2.1 历史演进脉络2.2 动力学方程统一框架 第三章 数学推导与摄动机制3.1 SGP4核心推导3.1.1 J₂摄动解析解3.1.2 大气阻力建模改进 3.2 SDP4深…

搭建运行若依微服务版本ruoyi-cloud最新教程

搭建运行若依微服务版本ruoyi-cloud 一、环境准备 JDK > 1.8MySQL > 5.7Maven > 3.0Node > 12Redis > 3 二、后端 2.1数据库准备 在navicat上创建数据库ry-seata、ry-config、ry-cloud运行SQL文件ry_20250425.sql、ry_config_20250224.sql、ry_seata_2021012…

Google I/O 2025 观看攻略一键收藏,开启技术探索之旅!

AIGC开放社区https://lerhk.xetlk.com/sl/1SAwVJ创业邦https://weibo.com/1649252577/PrNjioJ7XCSDNhttps://live.csdn.net/room/csdnnews/OOFSCy2g/channel/collectiondetail?sid2941619DONEWShttps://www.donews.com/live/detail/958.html凤凰科技https://flive.ifeng.com/l…

ORACLE 11.2.0.4 数据库磁盘空间爆满导致GAP产生

前言 昨天晚上深夜接到客户电话&#xff0c;反应数据库无法正常使用&#xff0c;想进入服务器检查时&#xff0c;登录响应非常慢。等两分钟后进入服务器且通过sqlplus进入数据库也很慢。通过检查服务器磁盘空间发现数据库所在区已经爆满&#xff0c;导致数据库在运行期间新增审…

计算机视觉---目标追踪(Object Tracking)概览

一、核心定义与基础概念 1. 目标追踪的定义 定义&#xff1a;在视频序列或连续图像中&#xff0c;对一个或多个感兴趣目标&#xff08;如人、车辆、物体等&#xff09;的位置、运动轨迹进行持续估计的过程。核心任务&#xff1a;跨帧关联目标&#xff0c;解决“同一目标在不同…

windows系统中下载好node无法使用npm

原因是 Windows PowerShell禁用导致的npm无法正常使用 解决方法管理员打开Windows PowerShell 输入Set-ExecutionPolicy -Scope CurrentUser RemoteSigned 按Y 确认就解决了

Nginx模块配置与请求处理详解

Nginx 作为模块化设计的 Web 服务器,其核心功能通过不同模块协同完成。以下是各模块的详细配置案例及数据流转解析: 一、核心模块配置案例 1. Handler 模块(内容生成) 功能:直接生成响应内容(如静态文件、重定向等) # 示例1:静态文件处理(ngx_http_static_module)…

Elasticsearch 学习(一)如何在Linux 系统中下载、安装

目录 一、Elasticsearch 下载二、使用 yum、dnf、zypper 命令下载安装三、使用 Docker 本地快速启动安装&#xff08;ESKibana&#xff09;【测试推荐】3.1 介绍3.2 下载、安装、启动3.3 访问3.4 修改配置&#xff0c;支持ip访问 官网地址&#xff1a; https://www.elastic.co/…

Java Map双列集合深度解析:HashMap、LinkedHashMap、TreeMap底层原理与实战应用

Java Map双列集合深度解析&#xff1a;HashMap、LinkedHashMap、TreeMap底层原理与实战应用 一、Map双列集合概述 1. 核心特点 键值对结构&#xff1a;每个元素由键&#xff08;Key&#xff09;和值&#xff08;Value&#xff09;组成。键唯一性&#xff1a;键不可重复&#…

HOW - React NextJS 的同构机制

文章目录 一、什么是 Next.js 的同构&#xff1f;二、核心目录结构三、关键函数&#xff1a;如何实现不同渲染方式&#xff1f;1. getServerSideProps —— 实现 SSR&#xff08;每次请求动态获取数据&#xff09;2. getStaticProps getStaticPaths —— 实现 SSG&#xff08;…

SkyWalking的工作原理和搭建过程

SkyWalking 是一个开源的 应用性能监控系统&#xff08;APM&#xff09;&#xff0c;专为云原生、微服务架构设计。其核心原理基于 分布式追踪&#xff08;Distributed Tracing&#xff09;、指标收集&#xff08;Metrics Collection&#xff09; 和 日志关联&#xff08;Log C…

软考 系统架构设计师系列知识点之杂项集萃(57)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;56&#xff09; 第93题 美国著名的卡内基梅隆大学软件工程学研究所针对软件工程的工程管理能力与水平进行了充分研究&#xff0c;提出了5级管理能力的模式&#xff0c;包括临时凑合阶段、简单模仿…

Java 泛型与类型擦除:为什么解析对象时能保留泛型信息?

引言&#xff1a;泛型的“魔术”与类型擦除的困境 在 Java 中&#xff0c;泛型为开发者提供了类型安全的集合操作&#xff0c;但其背后的**类型擦除&#xff08;Type Erasure&#xff09;**机制却常常让人困惑。你是否遇到过这样的场景&#xff1f; List<String> list …