HarmonyOS鸿蒙Next线上Codelabs挑战赛【第一期】网络书城

HarmonyOS鸿蒙Next线上Codelabs挑战赛【第一期】网络书城 应用简介
本文章是参加“HarmonyOS线上Codelabs挑战赛开启,火速加入秀出你的超级「码」力”活动写的一个应用介绍,活动地址:
https://developer.huawei.com/consumer/cn/forum/topic/0204102597850175203?fid=0101587866109860105

活动要求构建一款属于自己的HarmonyOS购物应用,我选择了网上书店。应用开发基于ArkUI中的声明式编程语言ETS。
整个作品功能分为以下部分:

  1. 浏览全部书籍,并可以分类查看;
  2. 点击书籍条目会进入详细界面,里面详细介绍了书籍主要内容、出版信息和预览图等信息,点击加入购物车,会在购物车中显示;
  3. 购物车功能,里面列出了用户加入购物车的所有书籍,选择书籍后,会提示用户总价格;
  4. 我的信息页面,列出了用户头像、昵称、账号信息,以及订单信息和常用工具等;

效果预览

功能简介

应用打开,首先是logo页面,1秒后自动进入主界面,似乎大部分网上商城都有这一步。

然后是主界面,

主页顶部是图书分类,点击不同分类会列出不同的书籍,书籍图片展示区加了“双十一优惠”提示,为了迎合目前的双十一活动,右侧是书名和价格,以及用户的评价数。

点击书籍条目,会进入对应书籍详细信息页面,如下

详情页展示了书籍简介、出版信息和书籍详情。点击“加入购物车”,会提示“加入购物车成功”,并自动返回上一级。

购物车页面,列出了用户加入购物车的全部书籍,选择不同的书籍,合计一栏会计算出总价。

我的页面列出了一些用户信息和常用功能。

代码解析

从LOGO页面切换到主页面,使用了一个动画加超时方法。

animateTo({
  duration: 100,
  curve: curves.cubicBezier(0.4, 0, 1, 1),
  delay: 100,
  onFinish: () => {
    setTimeout(() => {
      router.replace({ url: 'pages/HomePage' })
    }, 1000)
  }
}, () => {
})

主页底部导航栏,在布局组件的时候,用了一个@Builder修饰器,这就像是一个构建子函数,抽象好后别的地方可以多次调用。

@Component
struct HomeBottom {
  @Consume currentPage: number

  [@Builder](/user/Builder) RowItem(name: string, iconPath: string, selectIconPath: string, selected: boolean) {
    Column() {
      Image($rawfile(selected ? selectIconPath : iconPath))
        .objectFit(ImageFit.Cover)
        .height(30)
        .width(30)
        .renderMode(ImageRenderMode.Original)
      Text(name)
        .fontSize(15)
        .fontWeight(FontWeight.Bold)
        .padding(5)
        .fontColor(selected ? Color.Red : Color.Black)
    }
    .justifyContent(FlexAlign.Start)
    .height(60)
    .onClick(()=> {
      if (name == '主页') {
        this.currentPage = 1
      } else if (name == '购物车') {
        this.currentPage = 2
//        console.log('chart was selected.')
      } else if (name == '我的') {
        this.currentPage = 3
      }
    })
  }

  build() {
    Row(){
      this.RowItem('主页', 'nav/icon-home.png', 'nav/icon-buy.png', this.currentPage == 1)
      this.RowItem('购物车', 'nav/icon-shopping-cart.png', 'nav/icon-shopping-cart-select.png', this.currentPage == 2)
      this.RowItem('我的', 'nav/icon-my.png', 'nav/icon-my-select.png', this.currentPage == 3)
    }
    .alignItems(VerticalAlign.Bottom)
    .height(60)
    .width('100%')
    .margin({top:5 ,bottom:5})
    .justifyContent(FlexAlign.SpaceAround)
  }
}

“加入购物车”功能的实现,是通过AppStorage功能达到应用级存储的,这样别的地方就可以直接调用了。

  Text('加入购物车')
    .height(25)
    .fontSize(20)
    .fontColor(Color.White)
    .onClick(()=> {

      AppStorage.Set<GoodsData[]>('cart', addToCart(this.bookData['isbn']))
      prompt.showToast({
        message: '商品添加成功!',
        duration: 1000,
      });

      setTimeout(() => {
        router.back()
      }, 500)
    })
}
.justifyContent(FlexAlign.Center)
.alignItems(HorizontalAlign.Center)
.backgroundColor(Color.Red)
.width('100%')
.height(40)

项目总结

通过这次实践,对ArkUI的布局技巧有了更深一步的了解,同时也熟悉了应用级AppStorage的用法。


更多关于HarmonyOS鸿蒙Next线上Codelabs挑战赛【第一期】网络书城的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

很不错的app,能提供源代码学习一下就好了^^

更多关于HarmonyOS鸿蒙Next线上Codelabs挑战赛【第一期】网络书城的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这个不错

HarmonyOS鸿蒙Next线上Codelabs挑战赛【第一期】网络书城活动,旨在通过实际项目开发,帮助开发者熟悉鸿蒙系统的开发流程和技术栈。该挑战赛聚焦于网络书城应用的开发,涉及鸿蒙系统的分布式能力、UI框架、数据管理等核心技术。

参赛者将使用鸿蒙系统的ArkTS语言进行开发,ArkTS是鸿蒙系统推荐的开发语言,基于TypeScript并扩展了鸿蒙特有的能力。开发者需要利用鸿蒙系统的分布式数据管理技术,实现跨设备的数据同步与共享,确保用户在不同设备上访问书城时能够获得一致的数据体验。

此外,挑战赛还要求开发者运用鸿蒙的UI框架,设计并实现响应式布局,以适应不同屏幕尺寸的设备。开发者还需利用鸿蒙系统的网络通信能力,实现与后端服务器的数据交互,确保书城内容的实时更新与展示。

该挑战赛不仅考察开发者的技术能力,还注重对鸿蒙系统生态的理解与应用。通过参与该活动,开发者可以深入掌握鸿蒙系统的开发技巧,为后续的鸿蒙应用开发奠定基础。

HarmonyOS鸿蒙Next线上Codelabs挑战赛【第一期】网络书城,旨在通过实战项目帮助开发者掌握鸿蒙系统的网络应用开发技能。参赛者将基于HarmonyOS开发一个网络书城应用,涵盖书籍展示、搜索、购买等功能。挑战赛不仅提供详细的技术文档和代码示例,还设有专业导师答疑,帮助开发者快速上手。通过参与,开发者可以深入理解鸿蒙系统的分布式能力、UI框架及网络通信机制,提升实际开发能力。优秀作品将有机会获得官方认证及丰厚奖励。

回到顶部