HarmonyOS NEXT 实战之元服务:静态案例效果---查看国内航班服务

server/2024/12/27 20:10:21/

背景:

前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考

先上本期效果图 ,里面图片自行替换

在这里插入图片描述

效果图1完整代码案例如下:

  • Index代码
import { authentication } from '@kit.AccountKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { AddressExchangeViewComponent } from './AddressExchangeViewComponent';export const DATA_CONFIG: Record<string, number> = {'NUMBER_LEN': 7,'DURATION_TIME': 200,'MILLENNIAL_LEN': 3
}export const STYLE_CONFIG: Record<string, number> = {'ITEM_GUTTER': 12,'ITEM_HEIGHT': 26,'TEXT_MARGIN': 2,'PADDING_TOP': 32
}@Entry
@Component
struct Index {build() {Column({ space: STYLE_CONFIG.ITEM_GUTTER }) {Text($r('app.string.EntryAbility_label')).fontColor(Color.White).fontSize($r('sys.float.ohos_id_text_size_headline8')).width($r('app.string.digital_scroll_animation_max_size')).textAlign(TextAlign.Center)AddressExchangeViewComponent()}.padding({top: STYLE_CONFIG.PADDING_TOP}).margin({ top: 60 }).width($r('app.string.digital_scroll_animation_max_size')).height($r('app.string.digital_scroll_animation_max_size')).linearGradient({colors: [[$r('app.color.digital_scroll_animation_background_color'), 0.0],[$r('sys.color.ohos_id_color_background'), 0.3]]})}aboutToAppear() {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');this.loginWithHuaweiID();}/*** Sample code for using HUAWEI ID to log in to atomic service.* According to the Atomic Service Review Guide, when a atomic service has an account system,* the option to log in with a HUAWEI ID must be provided.* The following presets the atomic service to use the HUAWEI ID silent login function.* To enable the atomic service to log in successfully using the HUAWEI ID, please refer* to the HarmonyOS HUAWEI ID Access Guide to configure the client ID and fingerprint certificate.*/private loginWithHuaweiID() {// Create a login request and set parameterslet loginRequest = new authentication.HuaweiIDProvider().createLoginWithHuaweiIDRequest();// Whether to forcibly launch the HUAWEI ID login page when the user is not logged in with the HUAWEI IDloginRequest.forceLogin = false;// Execute login requestlet controller = new authentication.AuthenticationController();controller.executeRequest(loginRequest).then((data) => {let loginWithHuaweiIDResponse = data as authentication.LoginWithHuaweiIDResponse;let authCode = loginWithHuaweiIDResponse.data?.authorizationCode;// Send authCode to the backend in exchange for unionID, session}).catch((error: BusinessError) => {hilog.error(0x0000, 'testTag', 'error: %{public}s', JSON.stringify(error));if (error.code == authentication.AuthenticationErrorCode.ACCOUNT_NOT_LOGGED_IN) {// HUAWEI ID is not logged in, it is recommended to jump to the login guide page}});}
}
  • AddressExchangeViewComponent 代码
import curves from '@ohos.curves';
import { promptAction } from '@kit.ArkUI';@Preview
@Component
export struct AddressExchangeViewComponent {@State rotateAngle: number = 0;@State translateX: number = 0;@State swap: boolean = false;private JWidth: number = 300;build() {Column({ space: 15 }) {Row() {Text($r('app.string.address_exchange_address_left')).translate({ x: this.translateX }).width("40%").textAlign(this.swap ? TextAlign.End : TextAlign.Start).onClick(() => {promptAction.showToast({message: '北京',});})Stack() {Image($r('app.media.address_exchange_airplane')).size({height: 16,width: 16})Image($r('app.media.address_exchange_recycle')).size({height: 38,width: 38}).rotate({ angle: this.rotateAngle }).animation({curve: Curve.EaseOut,playMode: PlayMode.Normal,})}.width("20%").onClick(() => {this.swap = !this.swapanimateTo({ curve: curves.springMotion() }, () => {if (this.swap) {this.translateX = this.JWidth * 0.5;} else {this.translateX = 0}})this.rotateAngle += 180;})Text('深圳').translate({ x: -this.translateX }).width("40%").textAlign(this.swap ? TextAlign.Start : TextAlign.End).onClick(() => {promptAction.showToast({message: '点了'});})}.width(this.JWidth).borderWidth(1).borderRadius(8).padding(8).height(60)Row({ space: 15 }) {Text(this.getDate()).fontSize($r('app.string.ohos_id_text_size_headline')).fontWeight(FontWeight.Medium).height(30)Text($r('app.string.address_exchange_week')).height(30)}.width(this.JWidth).onClick(() => {promptAction.showToast({message: '点了'});})Button($r('app.string.address_exchange_search_ticket')).fontColor(Color.White).height(40).backgroundColor('#6486FF').width(this.JWidth).onClick(() => {promptAction.showToast({message: '今日机器出现故障,请找工作室人员解决'});})Row({ space: 10 }) {Row() {Text('出差 返现').fontSize(13).fontColor('#222222')Toggle({ type: ToggleType.Checkbox, isOn: false })}Row() {Row() {Text('带儿童/婴儿').fontSize(13).fontColor('#222222')Toggle({ type: ToggleType.Checkbox, isOn: true })}Row() {Text('学生票').fontSize(13).fontColor('#222222')Toggle({ type: ToggleType.Checkbox, isOn: false })}}}.width('100%').justifyContent(FlexAlign.SpaceBetween)Row() {Text('每周特价机票').fontSize(18).fontColor(Color.Black)Text('查看更多>').fontSize(15).fontColor(Color.Black)}.justifyContent(FlexAlign.SpaceBetween).width('100%').padding(10).onClick(() => {})Row({ space: 20 }) {Column({ space: 10 }) {Text('上海   ->   深圳').fontWeight(FontWeight.Bold).fontSize(13).fontColor('#5A5A5A')Row() {Text('12月3日 | 周一').fontSize(10).fontColor('#CAC8C9')Text('¥600').fontSize(15).fontColor(Color.Red).fontWeight(FontWeight.Bold).margin({ left: 8 })}.width('100%').justifyContent(FlexAlign.SpaceBetween)Text() {Span('原价  ').fontColor('#222222').fontSize(15)Span('¥1000').fontColor(Color.Red).fontSize(15)}.fontWeight(FontWeight.Bold).margin({ left: 8 })}.width('100%').borderRadius(4).backgroundColor('#F5F9F8').padding(8).alignItems(HorizontalAlign.Start)}Row({ space: 20 }) {Column({ space: 10 }) {Text('北京   ->   天津').fontWeight(FontWeight.Bold).fontSize(13).fontColor('#5A5A5A')Row() {Text('12月5日 | 周四').fontSize(10).fontColor('#CAC8C9')Text('¥300').fontSize(15).fontColor(Color.Red).fontWeight(FontWeight.Bold).margin({ left: 8 })}.width('100%').justifyContent(FlexAlign.SpaceBetween)Text() {Span('原价  ').fontColor('#222222').fontSize(15)Span('¥400').fontColor(Color.Red).fontSize(15)}.fontWeight(FontWeight.Bold).margin({ left: 8 })}.width('100%').borderRadius(4).backgroundColor('#F5F9F8').padding(8).alignItems(HorizontalAlign.Start)}}.width($r('app.string.address_exchange_content_size')).height(178).margin($r('app.string.ohos_id_card_margin_start'))}private getDate() {const now = new Date();const year = now.getFullYear();const month = now.getMonth() + 1; // 注意:月份是从0开始计数的const day = now.getDate();const hours = now.getHours();const minutes = now.getMinutes();const seconds = now.getSeconds();return `${year} 年 ${month} 月 ${day} 日`}
}

最近文章>>>>>>>>>>>

HarmonyOS NEXT实战:元服务与应用 APP 发布应用市场的详细步骤与流程

若本文对您稍有帮助,诚望您不吝点赞,多谢。

有兴趣的同学可以点击查看源码

  • gitee:https://gitee.com/jiaojiaoone/explore-harmony-next/tree/case%2Fwanandroid/
  • github:https://github.com/JasonYinH/ExploreHarmonyNext.git

http://www.ppmy.cn/server/153712.html

相关文章

桥接模式(Bridge Pattern)

桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;用于将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。它的核心思想是通过引入一个“桥”类&#xff0c;将抽象层与实现层解耦。 桥接模式的结构 Abstraction&#xff08;抽象部分&am…

Golang中的Map是怎么遍历的

在 Golang 中&#xff0c;遍历 map 的常见方法是使用 for...range 循环。map 是无序的键值对集合&#xff0c;因此遍历 map 时&#xff0c;每次迭代访问的键值对顺序可能不同。 以下是一个遍历 map 的示例&#xff1a; package mainimport "fmt"func main() {// 创…

【Linux】如何对比两个文件数据不同的地方

简介 可以使用vimdiff命令和diff diff使用 #使用diff命令对比数据 #diff 是最常用的文件对比工具&#xff0c;能够显示两个文件之间的不同之处。基本用法&#xff1a; diff file1.txt file2.txt #diff 会逐行对比文件&#xff0c;并显示它们之间的差异。 #输出中&#xff0c…

论文阅读 - 《Large Language Models Are Zero-Shot Time Series Forecasters》

Abstract 通过将时间序列编码为数字组成的字符串&#xff0c;我们可以将时间序列预测当做文本中下一个 token预测的框架。通过开发这种方法&#xff0c;我们发现像GPT-3和LLaMA-2这样的大语言模型在下游任务上可以有零样本时间序列外推能力上持平或者超过专门设计的时间序列训…

plantuml的picoweb无法渲染分页图表的问题

1. 背景 使用plantuml自带的picoweb在渲染分页图表时&#xff0c;vscode无法换页&#xff0c;但是使用plantuml官网渲染则没问题。查看plantuml官网的picoweb的说明&#xff0c;picoweb只是plantuml服务的最小实现。因此考虑可能是plantuml服务不全导致的上述问题。 2. docke…

探究人工智能在教育领域的应用——以大语言模型为例

摘要&#xff1a;随着人工智能技术的不断发展&#xff0c;大语言模型&#xff08;LLMs&#xff09;已经成为各行各业的重要工具。本文旨在探讨大语言模型在教育领域的应用现状、挑战和前景&#xff0c;提出一套切实可行的解决方案&#xff0c;以期为教育行业带来革新。通过对大…

连接串口设备后鼠标出现乱跳

在Windows 10系统中&#xff0c;连接串口设备后鼠标出现乱跳的现象&#xff0c;可能是由于串口设备被误识别为串行鼠标。以下是一些解决方法&#xff1a; 禁用串行鼠标检测&#xff1a; 打开设备管理器&#xff08;可以通过右键点击“此电脑”选择“管理”&#xff0c;然后选择…

在C#中制作一个字符串扩展来确定字符串是否与正则表达式匹配

正则表达式可以让你&#xff08;相对&#xff09;轻松地确定字符串是否与某种模式匹配。此示例展示了如何在 C# 中创建字符串扩展方法来确定字符串是否与正则表达式匹配 下面的StringExtensions类定义了Matches字符串扩展方法。 public static class StringExtensions {// Ext…