探索HarmonyOS开发:用ArkTS构建个人主页和活动管理系统【HarmonyOS 5.0(Next)】

news/2024/12/22 22:26:55/文章来源:https://www.cnblogs.com/baoto/p/18622708

探索HarmonyOS开发:用ArkTS构建个人主页和活动管理系统【HarmonyOS 5.0(Next)】

一、一个系统,统一生态

口号:“一个系统,统一生态”,旨在全面突破操作系统核心技术,实现系统架构由内到外的焕然一新。
流畅度提升:相比前代,HarmonyOS 5.0(Next)的流畅度提升了30%,系统运行更加丝滑。
续航增强:手机续航提升56分钟,有效提升了设备的续航时间。
全新设计:采用“和谐美学”设计,将光引入到鸿蒙设计中,通过算法模拟按钮光照效果,实现文字卡片与背景相互融合,令界面更加灵动惊艳。同时,新增了几套主题和锁屏实况窗,支持多功能卡片显示,使信息展示更加丰富和便捷。
分布式软总线:搭载全新分布式软总线,实现多设备之间无缝流传与共享,支持跨设备互通扫描、互通图库、跨设备剪贴板、应用内视频投播等功能。
小艺助手升级:搭载全新小艺助手,基于盘古大模型打造系统级AI,支持更多智能应用场景,如文档快速形成论文摘要、思维导图等。
安全性能提升:禁止应用获取9大不合理权限,所有应用均使用华为数据安全访问机制,采用星盾架构保护用户隐私。同时,支持文件加密分享,能够指定用户打开,且无法录屏、截图等。
方舟引擎升级:包括图形、多媒体、内存、调度、存储、低功耗、Web七大引擎都迎来提升,使得系统运行更加高效。
在这里插入图片描述

1.1 项目背景

HarmonyOS(鸿蒙操作系统)是华为公司推出的一种分布式操作系统。它被设计为一种全场景、全连接的操作系统,旨在实现在各种设备之间的无缝协同和共享,包括智能手机、平板电脑、智能穿戴、智能家居、车载系统等。HarmonyOS的目标是构建一个统一的、开放的、全场景的操作系统生态系统。

1.2 ArkTS详解

ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript(简称TS)基本语法风格的基础上,对TS的动态类型特性施加更严格的约束,引入静态类型。同时,提供了声明式UI、状态管理等相应的能力,让开发者可以以更简洁、更自然的方式开发高性能应用。
自然简洁语法
ArkTS提供了简洁自然的声明式语法、组件化机制、数据-UI自动关联等能力,实现了贴近自然语言,书写效率更高的编程方式,为开发者带来易学、易懂、极简开发的优质体验。
轻量化并发机制
ArkCompiler运行时在HarmonyOS上提供了Worker API支持并发编程。在运行时实例内存隔离的基础上,ArkCompiler通过共享运行实例中的不可变或者不易变的对象、内建代码块、方法字节码等技术手段,优化了并发运行实例的启动性能和内存开销。

二.HarmonyOS应用开发实战—开箱即用的个人主页页面详情

在这里插入图片描述

2.1 ArkTS页面源码

import router from '@ohos.router';
import promptAction from '@ohos.promptAction';
import web_webview from '@ohos.web.webview';
@Entry
@Component
struct Page1 {@State message: string = 'Hello World'@State paramsFromIndex: object = router.getParams()@State activities: object[] = this.paramsFromIndex?.['activities']@State newActivity : object={title: '',  // Assuming val is the title for the new activitytype: "",    // Assign a type for the new activitydescription: "",time: "",where: '',flag:''}build() {Column() {Column() {Button("返回").width("71.45vp").height("47.01vp").offset({ x: "-126.85vp", y: "-289.57vp" }).onClick(() => {router.replaceUrl({url: "pages/one",params: {activities:this.activities}})});Text("活动创建").width("200vp").height("60vp").offset({ x: "73.54vp", y: "-341.74vp" }).fontSize("24fp").margin({right:"10%"})Stack() {Text("时间:").width("64.84vp").height("39.78vp").offset({ x: "-117.83vp", y: "-206.26vp" }).fontSize("18fp")Text("标题:").width("64.84vp").height("39.78vp").offset({ x: "-116.66vp", y: "-257vp" }).fontSize("18fp")//标题TextInput().onChange((val: string) => {this.newActivity['title']=val}).width("197.88vp").height("37.65vp").offset({ x: "18.58vp", y: "-256.73vp" })// 地点TextInput().onChange((val: string) => {this.newActivity['where']=val}).width("197.88vp").height("37.65vp").offset({ x: "18.96vp", y: "-154.02vp" })// 活动描述TextInput().onChange((val: string) => {this.newActivity['description']=val}).width("189.36vp").height("37.65vp").offset({ x: "19.1vp", y: "-103.98vp" })// 活动类型TextInput().onChange((val: string) => {this.newActivity['type']=val}).width("189.36vp").height("37.65vp").offset({ x: "20.65vp", y: "-47.76vp" })// 照片TextInput().width("351.09vp").height("39.78vp").offset({ x: "20.36vp", y: "68.43vp" })// 时间TextInput().onChange((val: string) => {this.newActivity['time']=val}).width("200vp").height("37.65vp").offset({ x: "18.87vp", y: "-206.59vp" })Text("活动照片url:").width("139.34vp").height("41.91vp").offset({ x: "-98.11vp", y: "4.09vp" }).fontSize("18fp")Text("活动类型:").width("98.9vp").height("39.78vp").offset({ x: "-119vp", y: "-50.91vp" }).fontSize("18fp")Text("活动描述:").width("98.9vp").height("39.78vp").offset({ x: "-123.28vp", y: "-101.03vp" }).fontSize("18fp")Text("地点:").width("64.84vp").height("39.78vp").offset({ x: "-120.1vp", y: "-152.71vp" }).fontSize("18fp")Button("提交").width("133.17vp").height("52.33vp").offset({ x: "0vp", y: "190.96vp" }).fontSize("19fp").onClick(() => {console.log(String(this.newActivity['title']))console.log(String(this.activities))this.activities.push(this.newActivity);this.newActivity ={title: '',  // Assuming val is the title for the new activitytype: "",    // Assign a type for the new activitydescription: "",time: "",where: ''}// this.flag1=router.replaceUrl({url: "pages/one",params: {activities:this.activities}})})}.width("100%").height("567.16vp").offset({ x: "0vp", y: "-330.68vp" })}.width("100%").height("100%").offset({ x: "0vp", y: "285.38vp" }).justifyContent(FlexAlign.Center)}.width("100%").height("100%")}
}

2.2 代码解析

这段代码看起来是用一种声明式语法编写的,用于定义用户界面(UI)组件。代码似乎创建了一个应用程序的UI页面,可能是为移动设备或Web环境设计的。

  1. 导入模块:

    • 代码使用import语句导入各种模块或库,如routerpromptActionweb_webview。这可能用于处理路由、用户提示和Web视图。
  2. 组件声明:

    • @Entry@Component很可能是装饰器或注解,用于声明以下结构(struct Page1)是一个组件。
  3. 状态管理:

    • @State装饰器用于定义状态。例如,message是一个字符串状态,paramsFromIndex是通过router.getParams()获取的参数,activities是从paramsFromIndex中提取的活动数组,newActivity是一个对象,表示新活动的各个属性。
  4. UI构建:

    • build方法定义了用户界面的结构。代码使用ColumnButtonText等组件来构建页面布局和元素。其中包括返回按钮、活动创建标题、文本输入框等。
  5. 事件处理:

    • 使用.onClick.onChange等方法来定义按钮和输入框等组件的交互行为。例如,当提交按钮被点击时,会将新活动添加到activities数组中,并重定向到另一个页面。

2.3 心得

通过对这段代码的解析,可以得到以下心得:

  1. 语言特性: 代码中使用了一种具有声明式语法的编程语言,它可能是为了构建用户界面而设计的。这种语法看起来更贴近描述界面的结构和交互,而非直接操作DOM或UI元素。

  2. 组件化: 通过@Componentstruct Page1,代码采用了组件化的设计思路。这种方式有助于将用户界面划分为可重用的独立部分,提高了代码的可维护性和可扩展性。

  3. 状态管理: 使用@State来定义组件的状态,例如messageparamsFromIndexactivities。这种状态管理的方式使得组件能够在不同的用户交互和事件中保持一致的状态。

  4. 事件处理: 通过.onClick.onChange等事件处理方法,代码实现了用户界面元素的交互行为。例如,在按钮点击时执行路由切换操作,在文本输入框变化时更新相应的活动属性。

  5. 路由和导航: 代码中引入了router模块,表明应用可能涉及页面之间的导航和路由。这是构建多页面应用或单页面应用时常见的功能。

  6. 布局和样式: 通过组合使用ColumnButtonText等组件,代码定义了页面的布局结构,并通过.width.height.offset等属性设置了各个组件的样式和位置。

  7. 异步和回调: 代码中可能涉及异步操作,例如在按钮点击时执行的路由操作,这可能是因为路由切换是一个可能耗时的操作。

总体而言,这段代码展示了一种以声明式方式构建用户界面的方法,采用了组件化的设计理念,同时处理了状态、事件和导航等方面的功能。这种风格的代码通常更易读、易于维护,并且有助于提高开发效率。

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

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

相关文章

HarmonyOS应用开发实战-开箱即用的首页页面构建与ArkTS解析【HarmonyOS 5.0(Next)】

HarmonyOS应用开发实战-开箱即用的首页页面构建与ArkTS解析【HarmonyOS 5.0(Next)】 一、HarmonyOS Next 5.0的优势 AI能力:HarmonyOS Next 5.0通过系统级AI能力,将AI下沉至操作系统并赋能给多个子系统,从而提升了应用的智能化体验。例如,小艺助手在HarmonyOS Next 5.0中…

JavaWeb案例整体分析---》差旅费报销管理信息系统-数据库操作和Mybatis配置

数据库操作 ` CREATE TABLE ter_businessapply( id VARCHAR(8) PRIMARY KEY, name VARCHAR(50) NOT NULL, position VARCHAR(50) NOT NULL, department VARCHAR(50) NOT NULL, destination VARCHAR(100) NOT NULL, departure_date varchar(30) NOT NULL, return_date varchar(3…

深度科普文:细数倾斜摄影数据的缺点

详细介绍了倾斜摄影数据应用到三维可视化项目中的一些缺点。1. 引言 写这篇文章的起因是最近遇到一个使用倾斜摄影数据应标的三维可视化项目,业主认为倾斜摄影数据加载很卡,要求能浏览场景的时候能立刻显示出当前的场景最精细的模型,如下图1所示。其实这个问题遇到的次数还真…

Linux 性能调优命令

from pixivPS ps auxfps:显示系统中当前的进程信息。 a:显示与终端无关的所有进程(即显示所有用户的进程)。 u:以用户友好的格式显示进程信息,包括用户、CPU 和内存使用情况。 x:显示没有控制终端的进程,例如守护进程(daemon)。 f:以 ASCII 字符显示进程的树状结构,…

使用hackbar进行跨库注入

第一步 http://192.168.1.117/sqli-labs/Less-1/?id= union select 1,2,3 --+ //构建语句

Linux编写一个自己的命令

Linux编写一个自己的命令 编译一个.c文件,生成可执行文件out。out只有在当前目录下可以执行。 而命令可在任何路径执行想让out可以在任意路径执行,有以下两种办法 1、将执行文件添加到 /bin/ 路径下(专门存放可执行文件)添加到 /bin/ 路径下后,在任何路径都可识别到程序2、…

离开Jetbrains拥抱VsCode: 离开大便拥抱大便

文章讨论了作者从Jetbrains转向VsCode的原因,主要集中在AI编程支持和个性化体验上。Jetbrains在AI Coding的支持方面表现不佳,如更新速度慢、功能不足等,使得作者感到不满;而Jetbrains自己开发的AI Assistant也未能提供满意的体验。相对而言,VsCode在插件系统和自由度上表…

第十一篇:下载网站与动态网站架构

视频下载网站网站名:视频下载网站 域名:video.download.cn 站点目录:/app/code/vide/ 需求:浏览器打开后,显示目录结构 增加svip认证功能 增加统计功能(统计nginx服务的访问等状态)autoindex模块 自动索引功能(列表站点目录的内容),首页文件不存在autoindex模块 说明…

P1438 无聊的数列

链接:https://www.luogu.com.cn/problem/P1438 题面:思路: 差分+线段树。 刚开始的想法是建立一个双tag线段树:basetag和addtag。然后传递的时候basetag就是l的基准,addtag不变。求的话就是求节点值。 但是这样容易溢出。。。 所以考虑差分:利用前缀和代替当前某一点的值…

2024.12.22

数学归纳法常用公式\((a+b)^n\) \((a+b)^n\)的系数是杨辉三角的某一层,a升幂排列,b降幂排列 同理可得\((a-b)^n\),可以看作(\(a+(-b))^2\),与上面相同。

【PHP安全】php程序源码保护技术

一、基本介绍二、加密方式2.1 源码混淆处理2.1.1 PHP 威盾混淆2.1.2 php-obfuscator2.2 YAK Pro混淆处理2.3 源码外壳加密2.3.1 PHP Eval加密2.3.2 PHP Eval变异2.3.3 phpjiami处理2.4 源码扩展加密2.4.1 php-beast2.4.2 Zend Guard文末小结一、基本介绍 PHP语言作为脚本语言的…

[长期活动] 【4Z-API】每5楼抽取1位送10美金API额度,20%中奖机会!

​ 活动详情 活动时间: 长期有效 奖励内容: 每5楼抽取1位幸运用户,送价值10美金API额度 ** 参与方式** 登录 4Z API域名巧记:ZZZZAPI.com 4个Z然后API 简单好记:4Z= ZZZZAPI.com 每5个楼层将抽取1位幸运用户4Z-API优势稳定高速的API服务超值定价,性价比之选7x24小时技术支持…