HarmonyOS 鸿蒙Next 线上Codelabs挑战赛第一期——AtomLabShopping

一、简介

HarmonyOS线上Codelabs挑战赛开启,本期主题:构建一款属于你的 HarmonyOS 购物应用,参考官方提供的HarmonyOS Codelabs样例,和之前做的一款《邮印象》App(HarmonyOS ArkUI入门训练营—健康生活实战#邮印象ArkUI版)进行功能整合,使用Stage模型的设计,重新开发了一款Stage模型的购物应用Demo。

二、功能

2. 分类

![分类]

3. 购物车

![购物车]

4. 我的

![我的]

三、开发

核心代码

  • 导航栏
Navigation() {
      Tabs({ barPosition: BarPosition.Start, controller: this.controller }) {
        ForEach(this.toolBarConfigs, (item: ToolBarData, index) => {
          TabContent() {
            if (index === HOME) {
              HomePage()
            } else if (index === NEW) {
              NewPage()
            } else if (index === CAR) {
              ShoppingCart()
            } else if (index === USER) {
              UserPage()
            } else{
              this.HolderPage(item?.text)
            }
          }
        }, item => item.toString())
      }.setTabStyle()
    }
    .toolBar(this.ToolBarBuilder())
    .setNavStyle()
  • 列表
Scroll() {
      Grid() {
        LazyForEach(new MyDataSource(this.productItems), (item: ProductData, index) => {
          GridItem() {
            ProductGridItem({ productItem: item })
          }
//          .key('productGridItem' + (index + 1))
        }, (item: ProductData) => item.id.toString())
      }
      .rowsTemplate(this.gridRowTemplate)
      .columnsTemplate('1fr 1fr')
      .columnsGap(8)
      .rowsGap(8)
      .height(this.heightValue)
    }
    .scrollBar(BarState.Off)
    .padding({ left: 16, right: 16 })
  • 页面跳转
  public startDetailsAbility(context, index: number): void {
    const want = {
      bundleName: 'com.atomlab.atomlabshopping',
      abilityName: 'DetailsAbility',
      parameters: {
        position: index
      }
    };
    try {
      context.startAbility(want);
    } catch (error) {
      hilog.error(HOME_PAGE_DOMAIN, TAG, '%{public}s', error);
    }
  }
  • 参数传输
    onCreate(want, launchParam) {
        let index: number = want?.parameters?.position;
        AppStorage.SetOrCreate(KEY, index);
        hilog.info(DETAIL_ABILITY_DOMAIN, TAG, '%{public}s', 'Ability onCreate');
    }

###1、开发环境 因为要使用Stage模型的设计,所以之前DevEco Studio的版本不能用了,需要升级到3.1.0.100。Ability框架在API 8及更早版本使用FA模型,如需在FA模型开发应用,请使用HarmonyOS 3.0 Release版本。 ![开发环境]

###2、Stage模型

  • HAP:即HarmonyAbilityPackage,HarmonyOS应用编译、分发、加载的基本单位,也称为module,每个HAP都有一个应用内唯一的名称,称为moduleName;
  • Bundle:通过appid标识的HarmonyOS应用,Bundle可以包含多个HAP,每个应用都有一个bundleName,但是bundleName并不能唯一标识一个应用,appid中包含bundleName以及其他的更多信息,能够唯一标识一个应用;
  • AbilityStage:对应HAP的运行期类,在HAP首次加载到进程中时创建,运行期开发者可见;
  • Application:对应Bundle的运行期类,运行期开发者不可见;
  • Context:提供运行期开发者可以调用的各种能力,Ability组件和各种ExtensionAbility都有各自不同的context类,他们都继承自基类Context,基类提供包名、moduleName、路径等信息;
  • Ability:提供生命周期回调,持有AbilityContext,支持组件迁移/协同;
  • ExtensionAbility:基于场景的服务扩展能力统称,系统定义了多种基于场景的ExtensionAbility类,它们持有各自的ExtensionContext;
  • WindowStage:本地窗口管理器;
  • Window:窗口 管理器管理的基本单元,持有一个ArkUI引擎实例;
  • ArkUI Page:方舟开发框架页面。

Stage模型是区别于FA模型的一种应用开发模型,需要在module.json5和app.json5配置文件中对应用的包结构进行声明。

###3、工程目录 API version 8的eTS工程目录结构如下图所示:

![工程目录 API 8]

API version 7的eTS工程目录结构如下图所示:

![工程目录 API 7] 明显可以看到,从API 8开始,删除了java,也不支持java了。

###4、页面跳转 从API8开始,使用Stage模型的设计,页面的跳转不再使用router,而是由Want模块提供系统的基本通信组件的能力。

  public startDetailsAbility(context, index: number): void {
    const want = {
      bundleName: 'com.atomlab.atomlabshopping',
      abilityName: 'NewAbility',
      parameters: {
        position: index
      }
    };
    try {
      context.startAbility(want);
    } catch (error) {
      hilog.error(NEW_PAGE_DOMAIN, TAG, '%{public}s', error);
    }
  }

###5、运行调试 因为使用使用Stage模型的设计需要用到API9,目前DevEco提供的本地模拟器只有API6的,远程真机只有API8或以下的,只有远程模拟器有API9的。可是远程模拟器太卡,而且画质一言难尽@@,自己的手机是华为Mate40pro刚刚更新到最新也只是3.0.0.163,不支持。 ![运行调试]

##四、小结 因为要使用Stage模型的设计,本次开发是一次全新的学习和尝试,许多HarmonyOS 3.1之前的开发方式和用法都要重新适应。经过大概一周左右的开发,开始慢慢了解到其结构和模式,但是还有许多疑惑和需要继续学习的地方。后面会跟着一期、二期、三期,继续学习下去……

gitee地址上已提交,欢迎来指导


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

3 回复

不错不错,支持支持一下

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


姓名:张三 职位:软件工程师 简介:拥有5年软件开发经验,熟悉Java、Python和C++。

HarmonyOS 鸿蒙Next 线上Codelabs挑战赛第一期——AtomLabShopping,旨在通过实战项目帮助开发者掌握鸿蒙系统的开发技巧。参与者将基于AtomLabShopping应用,学习如何使用ArkUI、分布式数据管理和设备协同等核心技术,实现跨设备的购物体验。挑战赛提供详细的开发指南和代码示例,适合初学者和进阶开发者。通过完成任务,开发者不仅能提升技术能力,还有机会赢取丰厚奖励,助力在鸿蒙生态中的创新发展。

回到顶部