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

鸿蒙开发:弹出库更新至1.2.2版本,新增模态页面弹出

前言

最近一段时间,自己把更多的精力放在了内部测试插件的开发,以至于,自己维护的很多库,大家在Github中Issues提的问题,迟迟没有第一时间进行解决,不是不解决,而是实在腾不出时间,还好,内部测试插件已经完成开发,所维护的库,接下来也会提了日程进行一一解决。

今天把弹窗库(dialog)进行了更新,由1.2.1版本更新至了1.2.2版本,此版本最大的改动有两个,一个是新增了模态页面弹出,第二个是,优化了使用底部弹出动画组件的数据更新。

所谓的模态页面,其实就是一种大面板大视图交互式的弹窗,和其他弹窗组件一样,通常用于在保持当前的上下文环境时,临时展示用户需关注的信息或待处理的操作,基础库中使用了openBindSheet的形式进行实现,主要目的是可以实现在任意位置,任意地方进行弹出,不受其它条件的约束。

弹出库其它功能的使用方式,之前有过介绍,在中心仓库中也有着很详细的介绍,这里就不过多介绍了,只把更新的部分做下概述,dialog弹出中心仓库地址:

https://ohpm.openharmony.cn/#/cn/detail/@abner%2Fdialog

 

模态页面弹出效果

模态页面功能实现

模态页面,所有的UI都有业务端自定义,所以在使用之前,请绘制好自己的模态页面UI。

1、普通模态页面

声明一个Builder用于展示模态页面UI。

@Builderfunction sheetView() {Column() {Text("我是一个普通的模态页面").width("100%").height(100).textAlign(TextAlign.Center)}}

在需要调用的地方使用,可以是任意的位置,默认弹出是全屏高度。

showDialogSheet({ layout: wrapBuilder(sheetView) })

2、半模态高度(屏幕一半)

主要是通过height属性来设置模态页面的弹出高度,sheetView视图是自己定义的全局Builder。

showDialogSheet({layout: wrapBuilder(sheetView),options: {height: SheetSize.MEDIUM}
})

3、半模态高度(屏幕高度)

可以不设置,不设置也是默认的屏幕高度。

showDialogSheet({layout: wrapBuilder(sheetView),options: {height: SheetSize.LARGE}
})

4、半模态高度(自适应内容高度)

内容有多高,模态页面就会展示多高。

showDialogSheet({layout: wrapBuilder(sheetView),options: {height: SheetSize.FIT_CONTENT}
})

5、半模态高度(自定义高度)

也可以自由控制高度。

showDialogSheet({layout: wrapBuilder(sheetView),options: {height: 300}
})

6、隐藏关闭按钮

默认情况下,右上角会带关闭按钮,可以通过showClose设置为false来隐藏。

showDialogSheet({layout: wrapBuilder(sheetView),options: {showClose: false}
})

7、模态页面更新样式

如果你想更新模态页面的样式,可以通过updateStyleDialogSheet方法进行更新。

@Builder
function changeStyleSheetView(d: SheetData) {Column() {Text(d.title).width("100%").height(100).textAlign(TextAlign.Center)Button("更改样式").onClick(() => {//其他属性不需要updateStyleDialogSheet({options: {backgroundColor: Color.Pink}})})Button("关闭").margin({ top: 10 }).onClick(() => {closeDialogSheet()})}
}export class SheetData {title?: stringconstructor(title?: string) {this.title = title}
}

8、模态页面更新数据

更新数据,通过updateDataDialogSheet方式来更新,传递不同数据即可。

let sheetData1 = new SheetData("模态页面更新数据,3秒后我就会更新")
let sheetWrap1 = wrapBuilder(changeStyleSheetView)
showDialogSheet({layout: sheetWrap1,data: sheetData1
})
setTimeout(() => {updateDataDialogSheet(new SheetData("嘿嘿!我更新了~"))
}, 3000)

9、关闭模态页面

主动关闭页面,使用closeDialogSheet()方法进行关闭。

let sheetData2 = new SheetData("测试关闭模态页面")
let sheetWrap2 = wrapBuilder(changeStyleSheetView)
showDialogSheet({layout: sheetWrap2,data: sheetData2
})

底部弹出动画组件数据更新

在之前的版本,如果你使用了BottomAnimationView做为根组件,来实现从底部的弹出动画,那么在使用自定义弹窗,使用updateDialogParams来更新数据时,是不生效的,因为组件做了层级嵌套,也就是绘制的UI是BottomAnimationView的子组件,数据呢也必须从BottomAnimationView中回调,否则数据是无法更新的,在最新版本已经优化了这一问题。

简单案例如下:

代码调用

let params2 = new DialogParams()params2.title = "我是传递的参数"let builder2 = wrapBuilder(BottomBuilderDialogParams)showDialogParams(builder2, params2)clearTimeout(this.mTimeoutId)this.mTimeoutId = setTimeout(() => {let paramsBottom = new DialogParams()paramsBottom.title = "嘿嘿,我数据更新了"updateDialogParams(paramsBottom)}, 3000)

数据传递

数据传递主要通过BottomAnimationView定义的params属性。

@Builder
function BottomChild(d: DialogData) {Column() {Text((d.data as DialogParams).title).margin({ top: 30 })Row() {Button("取消").onClick(() => {//隐藏dialoghide()})Button("确定").margin({ left: 30 })}.margin({ top: 20 }).margin({ top: 30 })}.backgroundColor(Color.White).width("60%")
}@Builder
function BottomBuilderDialogParams(params: DialogParams) {BottomAnimationView({params: params,layoutChild: wrapBuilder(BottomChild)})
}

相关总结

目前弹出库的下载量是六千四百多个,不算多,当然了在中心仓库中也不算少,希望大家在使用中,有问题多多提,也希望可以帮助到更多需要的人。

http://www.dtcms.com/a/293145.html

相关文章:

  • Java中的泛型数据
  • K8S基础环境部署
  • 赋能未来数学课堂——基于Qwen3、LangChain与Agent架构的个性化教辅系统研究
  • Rocky Linux 9 快速安装 Node.js
  • 遇到JAVA问题
  • SQL 基础案例解析
  • Spring Boot 使用Jasypt加密
  • 我们能否承担微服务带来的复杂性和运维成本?
  • wps dispimg python 解析实现参考
  • ROS个人笔记
  • 【音视频协议篇】RTMP协议
  • A316-HF-I2S-V1:USB TO I2S HiFi音频转换器评估板技术解析
  • Flutter基础(前端教程①⑨-margin-padding)
  • 构建智能视频中枢--多路RTSP转RTMP推送模块在轨道交通与工业应用中的技术方案探究
  • List和Map的区别
  • Java值传递和构造函数
  • Java HttpClient使用手册
  • 【C语言进阶】动态内存管理(1)
  • Model Control Protocol 使用MCP进行各种任务适配,调用工具和资源进行客户端开发
  • OneCode3.0 UI组件注解详解手册
  • 前端之jQuery
  • Playwright 自动化测试系列(6)| 第三阶段:测试框架集成​指南:参数化测试 + 多浏览器并行执行
  • PCIe Base Specification解析(二)
  • Linux笔记2——常用命令-1
  • Sa-Token大师:第四章 - 企业级架构与源码实战
  • 首次启动 - OpenExo
  • 开发板系统烧写
  • 基于SpringBoot+MyBatis+MySQL+VUE实现的实习管理系统(附源码+数据库+毕业论文+项目部署视频教程+项目所需软件工具)
  • 面试知识梳理-vue3和vue2区别
  • Spring快速整合Mybatis