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

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

组件导航 (Navigation)+flutter项目搭建

接上一章flutter项目的环境变量配置并运行flutter

上一章面熟了搭建flutter并用编辑器运行了ohos项目,这章主要是对项目的工程化改造

先创建flutter项目,再配置Navigation

1.在开发视图的resources/base/profile下面定义配置文件,文件名可以自定义,例如:router_map.json。

{"routerMap": [{"name": "PageFlutter","pageSourceFile": "src/main/ets/pages/home/PageFlutter.ets","buildFunction": "PageFlutterBuilder","data": {"description": "this is PageOne"}},{"name": "PageTwo","pageSourceFile": "src/main/ets/pages/home/PageTwo.ets","buildFunction": "PageTwoBuilder","data": {"description": "this is PageTwo"}},{"name": "PageThree","pageSourceFile": "src/main/ets/pages/home/PageThree.ets","buildFunction": "PageThreeBuilder","data": {"description": "this is PageThree"}}]
}

2.在module.json5配置的module下面配置

{"module": {..."routerMap": "$profile:router_map",}
}

项目文件如下
在这里插入图片描述

在入口 "pages/Index"文件配置

需要注意的是flutter只会一次,把栈移到顶部,不能一直push
Index.ets

import { PageFlutterBuilder } from "./home/PageFlutter";
import { PageThreeBuilder } from "./home/PageThree";
import { PageTwoBuilder } from "./home/PageTwo";let storage = LocalStorage.getShared()@Entry(storage)
@Component
struct Index {@Provide('pageInfos') pageInfos: NavPathStack = new NavPathStack()private arr: string[] = ['PageFlutter', 'PageTwo', 'PageThree'];build() {Column() {Navigation(this.pageInfos) {List({ space: 12 }) {ForEach(this.arr, (item: string) => {ListItem() {Text("Page" + item).width("100%").height(72).backgroundColor('#FFFFFF').borderRadius(24).fontSize(16).fontWeight(500).textAlign(TextAlign.Center).onClick(() => {if(item==='PageFlutter'&&this.pageInfos.getAllPathName().includes('PageFlutter')){// flutter只会一次,把栈移到顶部this.pageInfos.moveToTop(item)}else {this.pageInfos.pushPath({ name: item});}})}}, (item: number) => item.toString())}.width("90%").margin({ top: 12 })}.mode(NavigationMode.Auto).hideTitleBar(true)}.height('100%').width('100%').backgroundColor('#F1F3F5')}
}

PageFlutter.ets

import { FlutterPage } from "@ohos/flutter_ohos";
import { common } from "@kit.AbilityKit";// 跳转页面入口函数
@Builder
export function PageFlutterBuilder() {PageFlutter();
}
const EVENT_BACK_PRESS = 'EVENT_BACK_PRESS'@Component
struct PageFlutter {pathStack: NavPathStack = new NavPathStack();@LocalStorageLink('viewId') viewId: string = "";private context = getContext(this) as common.UIAbilityContextbuild() {NavDestination() {Text('hellppp')if(this.viewId){FlutterPage({ viewId: this.viewId })}}.onReady((context: NavDestinationContext) => {this.pathStack = context.pathStack;}).onBackPressed(() => {this.context.eventHub.emit(EVENT_BACK_PRESS)return true;}).hideTitleBar(true)}
}

其他PageThree.ets,PageTwo.ets随便写

效果如下
在这里插入图片描述

http://www.xdnf.cn/news/475705.html

相关文章:

  • Android 中 权限分类及申请方式
  • HNU工训--计算机串口数据收发与测量
  • 安科瑞AcrelEMS3.0企业微电网智慧能源平台-安科瑞 蒋静
  • .NET Core liunx二进制文件安装
  • 22、能源监控与优化 - 数据中心模拟 - /能源管理组件/data-center-energy-monitoring
  • CSS面试题汇总
  • 中文分词与数据可视化02
  • 接触感知 钳位电路分析
  • [模型部署] 3. 性能优化
  • 我的 PDF 工具箱:CodeBuddy 打造 PDFMagician 的全过程记录
  • Java 并发编程归纳总结(可重入锁 | JMM | synchronized 实现原理)
  • 【LeetCode 热题 100】动态规划 系列
  • 从 Vue3 回望 Vue2:生命周期的清晰化——从混乱钩子到明确时机
  • 2025年渗透测试面试题总结-安恒[实习]安全服务工程师(题目+回答)
  • git克隆github项目到本地的三种方式
  • Vue百日学习计划Day16-18天详细计划-Gemini版
  • matlab建立整车模型,求汽车的平顺性
  • 【Golang笔记01】Goland基础语法规则
  • Leaflet 自定义瓦片地图与 PHP 大图切图算法 解决大图没办法在浏览器显示的问题
  • 容器编排利器-k8s入门指南
  • 移植RTOS,发现任务栈溢出怎么办?
  • 哪个品牌的智能对讲机好用?推荐1款,能扛事更智能
  • MySQL基础
  • Jenkins教程
  • 2025云智算技术白皮书
  • 青少年编程与数学 02-019 Rust 编程基础 16课题、包、单元包及模块
  • rust语言,与c,go语言一样也是编译成二进制文件吗?
  • Claude Prompt-Caching 方案调研
  • 6 任务路由与负载均衡
  • 【MySQL】索引太多会怎样?