天天看點

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

作者:前端小兮

前言

本文将會帶着大家做一個完整的項目,但是不包含後端,如果需要後端雲開發的話,後期再給大家補上

本來最開始是想帶着大家做鴻蒙官方的CodeLabs的,但是我看現在網上已經出了很多教程,尤其是機構,他們到時候應該會以視訊教學的方式帶着大家做,是以我就不做CodeLabs了,決定自己做一個單出的Demo,因為自己做的話需要設計等因素,是以拖了蠻長時間的

最後的項目代碼我傳到了Gitee上供大家參考,因為我自己也懶得用Github...

好的,我們開始吧

登陸頁面

我們建立項目,選擇空模闆就行了,建立完是這個樣子的

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

我現在需要添加一個登入頁和注冊頁,就直接建立兩個Page

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

我現在想建立一個常量的檔案,用來存放一些常量,例如一些文字大小,顔色等等

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

于是建立一個common并且建立一個Constant.ets

然後我先定義一下我登陸頁面标題的内容資料,這種資料的格式推薦是大寫,然後多個單詞用_進行分割

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

然後在登陸頁面使用

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

然後輸入框我們用TextInput元件來完成

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

我們先簡單做成這種效果,然後我們把一些别的地方也會用到的公共的常量拿出來

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

然後我們在Login中使用

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

這裡可能有人會說,為什麼不封裝一個Form元件呢?其實我最開始也是這麼想的,因為登陸和注冊都需要一個表單,但是在寫的過程中我發現其實也并不怎麼省事,而且我設想的後期的登陸和注冊頁面可能差別較大

當然,如果這裡你想封裝一個Form元件的話是完全可以的~

現在我們想擷取到輸入框的值,并且希望點選Button進行頁面跳轉,跳轉到Index

實戰篇:帶着大家用鴻蒙HarmonyOS做項目
實戰篇:帶着大家用鴻蒙HarmonyOS做項目

這裡順便傳了個參數,其實這個使用者名密碼應該存在應用裡的,但是這裡就當是複習一下傳參吧

然後Index接收

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

現在的效果是這樣的

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

然後我們同樣的邏輯,搞一下注冊頁面

注冊頁面

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

我們先在這裡加一行,可以跳轉到注冊

然後頁面和Login一個邏輯

import router from '@ohos.router'
import Constant from '../common/Constant'

@Entry
@Component
struct Register {
  @State message: string = 'Please Register'
  @State username: string = ''
  @State password: string = ''
  @State email: string = ''

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontColor(Constant.LOGIN_COLOR)
          .fontSize(Constant.LOGIN_SIZE)
          .fontWeight(FontWeight.Bold)
        TextInput({ placeholder: 'Username' })
          .margin({ top: 20 })
          .width(Constant.INPUT_WIDTH)
          .height(Constant.INPUT_HEIGHT)
          .onChange((value: string) => {
            this.username = value
          })
        TextInput({ placeholder: 'Email' })
          .margin({ top: 20 })
          .width(Constant.INPUT_WIDTH)
          .height(Constant.INPUT_HEIGHT)
          .onChange((value: string) => {
            this.email = value
          })
        TextInput({ placeholder: 'Password' })
          .type(InputType.Password)
          .margin({ top: 20 })
          .width(Constant.INPUT_WIDTH)
          .height(Constant.INPUT_HEIGHT)
          .onChange((value: string) => {
            this.password = value
          })
        Button('Register')
          .width(Constant.BUTTON_WIDTH)
          .height(Constant.BUTTON_HEIGHT)
          .margin({ top: 30 })
          .backgroundColor(Constant.BUTTON_COLOR)
          .onClick(() => {
            router.pushUrl({
              url: 'pages/Login',
              params: {
                username: this.username,
                password: this.password,
                email: this.email
              }
            })
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}
           
實戰篇:帶着大家用鴻蒙HarmonyOS做項目

這是最後效果,最終調到Login頁面

目前較為簡潔哈,後面會改善一下

Index

我們首先先通過Tabs将底部導航欄搞出來

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

現在代碼太亂了,我們希望Index幹淨一些,是以需要封裝一下

我們先将Tabs的内容封裝成一個元件,叫做TabBar

ets下建立一個views檔案夾用來存放元件,然後建立一個TabBar.ets

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

然後把Tabs下的内容都放在TabBar元件下,并導出

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

然後在Index中引入并使用

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

效果是一樣的

然後我們關注每個TabContent即可

首頁Home

先從我們的首頁開始

我們把首頁的内容也做成一個元件,叫做Home

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

然後在TabBar引入并使用

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

OK,好的,我們開始專心開發Home的内容吧

Search搜尋框

首先在頂部,我想有一個搜尋框

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

現在搜尋框完事了,但是代碼也有點備援了,是以我把這部分也抽出去,萬一以後别的地方會用呢

實戰篇:帶着大家用鴻蒙HarmonyOS做項目
實戰篇:帶着大家用鴻蒙HarmonyOS做項目

這裡的@Preview是我為了能夠單獨預覽元件用的

OK,效果是一樣的,我們繼續往下了

這裡注意,你完全可以去用自帶的Search元件

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

但是對我來說,其實寫的沒差太多,而且我想更自由化一點,具體選擇看你的場景即可

我先加上一個标題

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

List

然後下面是一個清單,那我就要去用List元件了

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

List是一個容器元件,它裡面的内容需要用ListItem進行填充,同時又需要多個ListItem,這就用到了之前學過的清單的循環渲染ForEach

現在的效果是這樣的

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

同時拉到最底部的時候會觸發onReachEnd事件,可以用來做一些操作

顯然,我們這個List不能直接放在這裡,于是封裝一個ProductList元件

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

在Home中引用

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

效果是一樣的

重新整理Refresh

然後正常的清單應該是可以下拉重新整理的,下拉重新整理我們有兩種方式

  • 封裝一個重新整理元件
  • 用ArcUI的元件

這裡我們就用Arc提供給我們的元件了,之後我看看優化的時候可以考慮封裝一個

其實在官網的CodeLabs中就有一個封裝的重新整理元件了,大家可以看看

連結給大家自定義下拉重新整理動畫(ArkTS) (huawei.com)

好的,那我們這裡用自帶的重新整理元件Refresh

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

這是效果

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

ListItem

好的,現在我們專注于ListItem的内容

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

我們先看看效果,顯然,裡面有很多資料,這時候我們就需要去寫資料了

我們在ets下建立一個viewModel檔案夾,用來存放資料

然後我們建立一個ProductData.ets用來放商品資料

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

這裡的Resource是指去拿資源裡的資料,這裡我拿的是圖檔,其實一些資料名或者是顔色在element裡面都可以進行設定

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

這裡大家知道就好,并不是什麼難的東西,目前我先不放在這裡

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

然後我進行使用,并設計一下每個ListItem

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

目前的效果是這樣的

這裡的過期提示我設定的是一個Button,因為我打算後期加一些功能

然後過期、新鮮兩種狀态我設定了不同的顔色,我現在想要做一個判斷,用來讓按鈕顯示不同的顔色,那麼就需要用條件渲染了

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

這樣就可以進行動态的判斷了

我的頁面

現在我們來做Mine子產品

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

OK,我們建立了一個Mine.ets并且在TabBar裡面進行引用,現在我們專注于Mine子產品即可

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

我現在想要這種類型的輸入框,但是Arc原生并沒有提供,是以需要我們封裝一下

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

然後我們通過傳參的形式在Mine給TextPro指派

實戰篇:帶着大家用鴻蒙HarmonyOS做項目
實戰篇:帶着大家用鴻蒙HarmonyOS做項目

OK,效果出來了

然後我們再加上一行個性簽名

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

現在我們需要功能更加複雜的輸入框

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

然後可以點選彈出彈出框

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

OK,我們來搞一下

我們這回封裝一個TextPlus元件

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

大部分和之前的都一樣,不過是多了一個箭頭,然後多出了一個事件,這個事件将會用來觸發彈窗

然後我們來做彈窗部分

這裡我們需求和官方的文本滑動選擇器彈窗大體是一緻的,于是我們就采用這種方案

實戰篇:帶着大家用鴻蒙HarmonyOS做項目

然後我們寫一下

實戰篇:帶着大家用鴻蒙HarmonyOS做項目
實戰篇:帶着大家用鴻蒙HarmonyOS做項目
實戰篇:帶着大家用鴻蒙HarmonyOS做項目

現在的效果就是這樣了

原文連結:https://juejin.cn/post/7307889500545400851