一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙開發(fā)——便單APP-輕便小巧的待辦清單【biandangroup】

王程 ? 來源:jf_75796907 ? 作者:jf_75796907 ? 2024-02-27 16:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、關(guān)于項目

1.1 項目特色

1.嚴格遵循設計規(guī)范,提供 6 種主題配色,自動深淺色適配;
2.20+ 原生自定義組件,純 ArkTS 打造,未使用三方庫;
3.一次開發(fā),多端部署,為大中小不同類型的屏幕單獨適配,手機平板折疊屏都有沉浸體驗;
4.分布式技術(shù),自創(chuàng) rdb 轉(zhuǎn) kv 數(shù)據(jù)傳輸,組網(wǎng)內(nèi)自發(fā)現(xiàn),數(shù)據(jù)無感同步;
5.提供不同功能不同大小的六款萬能卡片,操作一步到位;
6.本地文件存儲備份。

1.2 概述

隨著日常生活中任務和日程的增加,人們經(jīng)常會遇到遺忘一些重要事情的問題?,F(xiàn)在,我們有許多待辦清單類 APP,但它們要么功能過于復雜,要么功能過于簡單,無法滿足用戶需求。此外,數(shù)據(jù)同步和安全性也是一個常見的問題。在這樣的情況下,我們決定開發(fā)一款既簡單易用,又具有豐富功能的待辦清單類 APP,能夠幫助用戶更好地管理自己的任務和日程安排,提高工作和生活的效率。

在選擇開發(fā)平臺時,我們發(fā)現(xiàn) oh 的分布式能力可以解決數(shù)據(jù)的同步和安全性問題,并且 oh 平臺上還沒有功能完善的待辦清單類 APP,這使得我們能夠填補市場空缺。

綜上,我們決定開發(fā)一個原生的,具有多端適配和同步備份功能的待辦清單類應用,以達到解決市場空缺,解決用戶需求的目的。

我們的 APP 名為“便單”,是用于 oh 標準設備的待辦事項管理的工具。它采用 ArkTS 語言編寫,基于 ArkUI 的強大能力和原生圖標的精確使用,我們創(chuàng)建了簡潔明了的設計風格,讓用戶一目了然地看到自己的任務清單。同時,我們提供了多種主題色供用戶自由選擇,增加了趣味性和個性化,還適配了系統(tǒng)級的深淺配色,實現(xiàn)了系統(tǒng)級的沉浸式體驗。

“便單”不僅可以讓用戶添加、編輯、刪除、篩選、歸檔自己的任務,還可以讓用戶設置任務的優(yōu)先級、截止日期、重復規(guī)則、提醒方式等多種屬性,讓用戶更靈活地管理自己的任務。我們還提供了日歷頁面、四象限頁面、多種萬能卡片等方式拓展用戶的使用場景,優(yōu)化用戶的使用體驗。

最重要的是,“便單”支持多設備,可以在不同的設備間交換和同步用戶的數(shù)據(jù),讓用戶可以隨時隨地地查看和更新自己的任務清單。這些功能全都是在本地進行的,不必擔心數(shù)據(jù)泄露。

1.3 程序約束限制

1.本示例僅支持標準系統(tǒng)上運行。
2.本示例為 Stage 模型,支持 API version 9 版本 SDK。
3.本示例需要使用 DevEco Studio 3.1 Release 版本進行編譯運行。

二、應用設計

2.1 需求分析

基于應用的使用場景和平臺,我們認為一個完整的待辦清單類 APP 應該具有以下功能:

1.創(chuàng)建事項
用戶創(chuàng)建事項時,應該可以自定義多種屬性,包括標題,備注,有效時間,分類文件夾,是否收藏,是否重要等。包括可以創(chuàng)建循環(huán)事件,可以自定義循環(huán)周期和循環(huán)具體規(guī)則。

2.編輯事項
創(chuàng)建完事件后,應該可以隨時修改事件的所有內(nèi)容,包括完成標記應該可以撤銷,過期事項應該可以延期。

3.刪除事項
創(chuàng)建的事件應該可以隨時刪除,包括多端同時刪除。

4.事項整理
事項應該可以提供分類,包括文件夾分類,事件分類(日歷視圖),是否重要是否緊急的分類(四象限視圖)等。

5.數(shù)據(jù)導出導入
所有的數(shù)據(jù)都應該可以導出到本地,又可以從本地備份中恢復,方便用戶重置應用或者更換設備時可以實現(xiàn)數(shù)據(jù)不會丟。

6.多端同步
需要利用好分布式的特點,做出差異化,實現(xiàn)局域網(wǎng)內(nèi)設備的數(shù)據(jù)同步,包括自動和手動兩種方式。

7.定點提醒
事項應該還具備定時提醒的功能,在用戶設定的時間點通過系統(tǒng)創(chuàng)建提醒,保證用戶在某個具體時間收到提醒。

8.萬能卡片
可以使用華為的服務,基于系統(tǒng)特性提供萬能卡片服務功能,實現(xiàn)一級界面直接操作 APP。

并且應該嚴格遵守設計規(guī)范,制作美觀簡潔界面,同時支持手機,折疊屏,平板三端,支持淺色模式深色模式。

美術(shù)設計方面盡量使用華為原生圖標,保證軟件與系統(tǒng)的一致性,同時應該盡量使用 SVG 格式的圖片,減輕應用大小,矢量圖也更方便資源復用,保證多端顯示的美觀和統(tǒng)一。

2.2 項目結(jié)構(gòu)

├─entry
├─src
├─main
├─ets
|  ├─control                        //控制器
|  ├─dao                            //數(shù)據(jù)訪問對象
|  ├─entryability
|  |      └EntryAbility.ets         //卡片生命周期管理文件
|  ├─entryformability
|  |        └EntryFormAbility.ets   //應用生命周期管理文件
|  ├─formview                       //卡片視圖
|  ├─model                          //結(jié)構(gòu)模型
|  └pages                           //視圖
|     ├─element                     //其他自定義組件
|     └view                         //界面組件
├─resources                         //資源文件
|  ├─base
|  ├─dark                           //深色模式資源
|  ├─light                          //淺色模式資源
|  └rawfile
└module.json5                       //配置文件

?

2.3 部分特色功能概要設計

2.3.1 數(shù)據(jù)導出

wKgaomXdm8CAQugFAAA5xl_Sgaw631.png

要實現(xiàn)數(shù)據(jù)導出導入,首先應當申請系統(tǒng)讀寫權(quán)限,數(shù)據(jù)導出只需要將數(shù)據(jù)庫內(nèi)容導出然后寫入設定的文件夾中的文件即可。

2.3.2 數(shù)據(jù)導入

wKgaomXdm8yAfrfuAAA8-DQryUs250.png

導入文件類似于導出和添加的結(jié)合,申請到文件讀寫權(quán)限后,將需要導入的文件讀入程序,然后覆寫掉數(shù)據(jù)庫即可,注意提醒應當即時更新成當前版本。

2.3.3 數(shù)據(jù)同步

wKgZomXdm9WAHzZ6AABO5Mb1rRU572.png

數(shù)據(jù)同步需要申請分布式數(shù)據(jù)的訪問權(quán)限,首先監(jiān)聽組網(wǎng)中的其他設備,然后監(jiān)聽其他設備是否有發(fā)布新版本的數(shù)據(jù),監(jiān)聽到新版本數(shù)據(jù)即可執(zhí)行導入操作,覆寫掉本地數(shù)據(jù),實現(xiàn)數(shù)據(jù)的同步。

2.3 數(shù)據(jù)庫設計

數(shù)據(jù)庫結(jié)構(gòu) ER 圖如下:

wKgZomXdm-GADS4PAACEhxtNE8k879.png


其中 Task 是創(chuàng)建事項的實體,ShowTask 為展示事項的實體,因為在創(chuàng)建事項的時候可能會產(chǎn)生循環(huán)事項,一次性創(chuàng)建多個事項,這些事項的很多信息都是相同的。如果直接多次重復創(chuàng)建,會造成很多數(shù)據(jù)冗余,所以我們將具體信息都存在 Task 實體中,將單次事項的信息存放在 ShowTask 中。

而文件夾實體顧名思義,是歸類事項的實體,由于一個循環(huán)事項應該也在同一個分類,所以從屬文件夾應該是 Task 的一個屬性,為了方便編輯文件夾和避免冗余,他們應該是一個一對多的從屬關(guān)系。

三、部分應用特色功能實現(xiàn)

3.1 定時通知

向系統(tǒng)提交定時通知的申請,以實現(xiàn)在需要的時候即使應用不在前后臺也能正常提醒,

實現(xiàn)代碼如下,所選的在發(fā)布時間時在系統(tǒng)通知欄顯示標題信息和有效時間信息。

/**
 * 發(fā)布通知
 * @param id
 * @param title 通知標題
 * @param StartTimeDate 有效開始日期
 * @param ValidStartTime 有效結(jié)束日期
 * @param EndTimeDate 有效開始時間
 * @param ValidEndTime 有效結(jié)束時間
 * @param publishTime 發(fā)布時間
 */
async function publishNotification(eventId: number, title: string, StartTimeDate: number[], ValidStartTime: number[], EndTimeDate: number[], ValidEndTime: number[], publishTime: number[]) {
  let validStartTime: number[] = StartTimeDate.concat(ValidStartTime)
  let validEndTime: number[] = EndTimeDate.concat(ValidEndTime)
  let DefaultTimeFormat: number = AppStorage.Get("DefaultTimeFormat")
  let validTime: string = getValidTimeInfo(validStartTime, validEndTime, [publishTime[0], publishTime[1], publishTime[2]], DefaultTimeFormat == 0)
  let timer = await getReminderRequest(eventId, title, validTime, publishTime)
  if (await getPermission_PUBLISH_AGENT_REMINDER()) {
    let reminderId = await reminderAgent.publishReminder(timer)
    setStorage(eventId, reminderId)
  }
}

?
若是因為一些原因需要撤銷通知,我們可以通過 id 撤回該申請

async function cancelNotification(eventId: number) {
  let id = await getStorage(eventId)
  reminderAgent.cancelReminder(id).then(() => {
    console.log("[Reminder] cancelReminder promise: " + id);
  });
}

?

3.2 數(shù)據(jù)導出和導入

在底部頁簽中,點擊設置即可切換到設置界面。

“本地備份”點擊后可以打開對應界面,之后可以開啟自動備份,即在每次退出應用時候自動備份?;蛘呖梢栽谙路近c擊立即備份以手動備份。同時可以點擊右側(cè)的刷新查看當前所有備份情況。

首先查詢媒體讀寫權(quán)限是否獲取,若是沒有則申請權(quán)限:

export async function getPermission_WRITE_MEDIA(): Promise {
  let array: Array = ['ohos.permission.READ_MEDIA', 'ohos.permission.WRITE_MEDIA'];
  var context = featureAbility.getContext()
  context.requestPermissionsFromUser(array, 1);
  var authResults0 = await context.verifyPermission(array[0])
  var authResults1 = await context.verifyPermission(array[1])
  let ret: boolean = ((authResults0 == 0) && (authResults1 == 0))
  if (!ret) {
    AppStorage.Set('BackUpSwitch', false)
    AppStorage.Set('AutoBackUpSwitch', false)
  }
  return ret
}

?
導出備份的代碼實現(xiàn)如下:

export async function backupFile() {
  let value = await getPermission_WRITE_MEDIA()
  if (value) {
    let data: object = await getBackupObject()
    let str: string = JSON.stringify(data)
    console.log('backup value: ' + str);
    await writeFile(str)
    await deleteRedundancyFile()
  }
}

?
為了實現(xiàn)只保留 10 個備份上限,防止備份過多導致占用空間爆炸,我們在每次備份前都檢查一次備份數(shù)量,大于 10 個就刪除到只保留 10 個為止:

async function deleteRedundancyFile() {
  let BackUpSwitch: boolean = AppStorage.Get('BackUpSwitch')
  if (!BackUpSwitch) return []

  let media = mediaLibrary.getMediaLibrary();
  console.log('filesFetchOptions = ' + JSON.stringify(filesFetchOptions))
  let fetchFileResult = await media.getFileAssets(filesFetchOptions)
  console.log('fetchFileResult = ' + JSON.stringify(fetchFileResult) + ' ,number: ' + fetchFileResult.getCount().toString())
  let count: number = 0
  if (fetchFileResult.getCount() > 0)
    for (let i = await fetchFileResult.getFirstObject();!fetchFileResult.isAfterLast(); i = await fetchFileResult.getNextObject()) {
      if (!await i.isTrash()) {
        if (count < 10) {
          ++count
        } else {
          deleteFile(i)
        }
      }
    }
}

?
導入備份的代碼實現(xiàn)如下:

export async function importFile(data: mediaLibrary.FileAsset): Promise {
  let value = await getPermission_WRITE_MEDIA()
  if (value) {
    console.log('import: ' + JSON.stringify(data));
    let obj: string = await readFile(data)
    let ret = JSON.parse(obj)
    console.log('import value: ' + JSON.stringify(ret));
    return new Promise((resolve) => {
      backUpImpl.importData(ret, (flag: boolean, reason: string) => {
        resolve([flag, reason])
      })
    })
  }
}

?

3.3 多端同步

在設置頁點擊“多端同步”后打開界面,開啟后可以下載或者上傳數(shù)據(jù)并儲存在分布式數(shù)據(jù)庫中。并且在下方可以查看已經(jīng)連接的設備情況。

首先檢查應用是否獲取訪問分布式數(shù)據(jù)的權(quán)限,若是沒有則申請權(quán)限:

export async function getPermission_DISTRIBUTED_DATASYNC(): Promise {
  let array: Array = ['ohos.permission.DISTRIBUTED_DATASYNC', 'ohos.permission.GET_DISTRIBUTED_DEVICE_INFO'];
  var context = featureAbility.getContext()
  context.requestPermissionsFromUser(array, 1);
  var authResults0 = await context.verifyPermission(array[0])
  var authResults1 = await context.verifyPermission(array[1])
  console.log("====>requestData====> " + authResults0 + ' ,' + authResults1);
  let ret: boolean = ((authResults0 == 0) && (authResults1 == 0))
  if (!ret) {
    AppStorage.Set('TerminalsSyncSwitch', false)
    AppStorage.Set('AutoTerminalsSyncSwitch', false)
  }
  return ret
}

?
由于三方應用并沒有權(quán)限查看組網(wǎng)內(nèi)設備列表,但是可以監(jiān)聽指定數(shù)據(jù)庫,我們通過一個算法實現(xiàn)了對組網(wǎng)內(nèi)列表的監(jiān)聽。

首先在本地生成唯一標識碼,和本機設備名稱,打包成一個類,準備上傳至分布式數(shù)據(jù)庫,再打開監(jiān)聽,若該數(shù)據(jù)庫內(nèi)容改變,則檢查其中是否有自己的信息,沒有的話加入自己的信息。在每次主動請求組網(wǎng)內(nèi)設備時,我們先清空該數(shù)據(jù)庫,然后將本機信息寫入數(shù)據(jù)庫,即可實現(xiàn)對組網(wǎng)內(nèi)設備列表的獲取。

這樣子可以保證每次打開手動獲取都會通知組網(wǎng)內(nèi)設備將自己的信息寫入,從而收集完所有的信息,最后顯示在前端即可。

缺點是會有明顯的延遲,實機運行延遲可以保證在 5s 內(nèi)。

完整代碼如下:

export async function getTerminalsList(): Promise {
  let TerminalsSyncSwitch = AppStorage.Get('TerminalsSyncSwitch')
  if (!TerminalsSyncSwitch)
    return []
  const kvStore = await getKVStore()
  let thisDevice = getLocalTerminals()
  return new Promise((resolve) => {
    kvStore.get(Device_Key, function (err, DeviceList) {
      console.log("get success Device_Key: " + DeviceList);
      console.log("get error: " + err);
      let deviceList: object[] = (DeviceList == undefined) ? [] : JSON.parse(DeviceList)
      if (!deviceList.some(item => JSON.stringify(item) === JSON.stringify(thisDevice))) {
        deviceList.push(thisDevice)
        DeviceList = JSON.stringify(deviceList)
        console.log("[Sync] get new Device_Key: " + DeviceList);
        kvStore.put(Device_Key, DeviceList)
      }
      resolve(deviceList)
    });
  })
}

?
向所有設備發(fā)送數(shù)據(jù)和接收數(shù)據(jù),只需要將數(shù)據(jù)庫中的備份內(nèi)容發(fā)送到分布式數(shù)據(jù)庫即可,若是需要自動同步,則打開數(shù)據(jù)庫監(jiān)聽:

export async function ExportNewVersion(showPrompt: boolean = false) {
  const kvStore = await getKVStore()

  let data: object = await getBackupObject()
  let str: string = JSON.stringify(data)
  console.log('[Sync] backup value: ' + str);

  let newVersion: number = AppStorage.Get('LocalVersionNumber')

  console.log('[Sync] newVersion: ' + newVersion);
  kvStore.get(Version_Key, function (err, SyncVersion) {
    console.log("get success Version_Key: " + SyncVersion);
    console.log("get error: " + err);
    if (SyncVersion == undefined || SyncVersion < newVersion) {
      console.log('[Sync] newVersion: ' + newVersion);
      kvStore.put(Version_Key, newVersion)

      let i: number = 0;
      for (; i < str.length; i += MaxLength) {
        kvStore.put(Data_Key + (i.toString()), str.substring(i, i + MaxLength))
      }
      kvStore.put(Length_Key, str.length)

      if (showPrompt)
        prompt.showToast({
          message: '發(fā)送成功,快去看看吧!',
          duration: 1000,
        });
    } else {
      if (showPrompt)
        prompt.showToast({
          message: '發(fā)送失敗,發(fā)送數(shù)據(jù)不為最新',
          duration: 1000,
        });
    }
  });
}
/**
 * 從數(shù)據(jù)庫導入數(shù)據(jù)新版本
 */
async function ImportNewVersion(): Promise {
  let TerminalsSyncSwitch = AppStorage.Get('TerminalsSyncSwitch')
  if (!TerminalsSyncSwitch)
    return [false, 0, '']

  const kvStore = await getKVStore()

  let newVersion: number = AppStorage.Get('LocalVersionNumber')

  console.log('[Sync] newVersion: ' + newVersion);

  return new Promise((resolve) => {
    kvStore.get(Version_Key, async function (err, SyncVersion) {
      console.log("get success Version_Key: " + SyncVersion);
      console.log("get error: " + err);
      if (SyncVersion != undefined && SyncVersion > newVersion) {
        let end: number = await kvStore.get(Length_Key)
        let obj: string = ''
        for (let i = 0; i < end; i += MaxLength) {
          obj += await kvStore.get(Data_Key + (i.toString()))
        }
        console.log("get success Data_Key: " + obj);
        console.log("get error: " + err);
        console.log('[Sync] import: ' + JSON.stringify(obj));
        let ret = JSON.parse(obj)
        console.log('[Sync] import value: ' + JSON.stringify(ret));
        backUpImpl.importData(ret, (flag: boolean, reason: string) =?> {
          resolve([flag, SyncVersion, reason])
        })
      } else {
        resolve([false, SyncVersion, '未接收到新數(shù)據(jù)'])
      }
    });
  })
}

?
由于 KV 數(shù)據(jù)庫的 Value 有長度限制,我們可以拆解同步內(nèi)容在不同的 Value 中,之后又再組合起來,每次發(fā)布版本時還應該打上時間戳標記進行對比,避免老版本覆蓋新版本。

四、軟件功能和界面操作說明

4.1 歡迎界面

在用戶首次點擊進入軟件時,會跳出該界面。會讓用戶進行隱私政策和用戶協(xié)議的閱讀,并同意后進行勾選,才可進入程序。

wKgaomXdnE-AdRFBAAAr5OA2U78098.png


在此處,用戶可點擊高亮字體處的鏈接,打開用戶協(xié)議和隱私政策的界面,進行詳細的閱讀。我們希望通過隱私政策告知用戶如何處理其個人信息,并清晰地闡明了收集、存儲、使用、共享和保護用戶信息的方式,以及如何處理用戶的請求和投訴等。以及通過用戶協(xié)議規(guī)范用戶行為,其中包含軟件的使用限制、禁止的行為、用戶義務和責任、維權(quán)條款等,以防止用戶濫用軟件、違反法律法規(guī)和侵犯他人權(quán)利。

在用戶閱讀完并確認后,可以在上一界面,在是否同意處勾選后,點擊進入程序。

4.2 引導界面

在用戶首次點擊進入并通過用戶協(xié)議和隱私政策后,會進入引導界面。引導界面作為軟件使用過程中的一個重要組成部分,可以幫助用戶快速了解軟件的基本功能和操作方法,提高用戶的使用效率和體驗。在這里我們分別對修改,完成及添加待辦事項;收起,展開及切日歷,展開象限,快捷同步等功能進行了詳細的操作方式的介紹,以幫助用戶快速找到需要的功能,指引其完成操作,以提高軟件使用效率和體驗。

wKgaomXdneeAfs94AAA3nJ3AMLg59.jpegwKgZomXdnFaAM0xMAAA3nJ3AMLg613.png

以下為部分引導界面所進行教學的操作。

wKgZomXdneqAP6hmAABLouACFSA37.jpegwKgaomXdnF6AYGDYAABLouACFSA176.pngwKgZomXdnFaAM0xMAAA3nJ3AMLg613.pngwKgaomXdnHKAUi3lAAA1aFW9rbY821.png

若用戶在使用期間遺忘了引導界面介紹的操作方式,可以通過“設置-關(guān)于-打開引導界面”的路徑,重新喚起以上的引導界面,熟悉對應操作:

wKgZomXdnICAFQGWAABekzHlidM262.png

4.3 清單界面

在首次進入程序,通過歡迎界面和引導界面后,以及之后進入程序,都會進入該清單界面。即在下方頁簽欄處顯示為“清單”高亮的界面(平板橫置時該頁簽在左側(cè))。同時,也可以通過該頁簽的點擊,切換至“日歷”、“四象限”或是“設置”界面。

wKgaomXdnImAIhZsAAAJk0odSJw303.png

在該清單界面左上方,有兩個下拉選擇按鈕,上方的可以進行日期的選擇,以查看對應日期的待辦事項。

wKgaomXdnJSAetZDAAA78kOMw1I008.png

下方的可以進行待辦單的選擇,即選擇查看選定日期下,對應待辦單或是全部待辦中的具體待辦事項。

wKgaomXdnJyAGRiYAABiQoY6aoY683.png

在平板端 UI 界面中,下方的待辦單選擇下拉按鈕移動到左邊的選擇欄中,如下:

wKgaomXdnKWAOVLWAABJgJz1AhA396.png

在下方是數(shù)據(jù)展示區(qū)域,其左邊,通過數(shù)字的形式向用戶顯示在所選擇的日子和選擇的對應待辦單下,已完成待辦和未完成待辦的數(shù)量。右邊則是一個百分比顯示環(huán),能夠直觀的顯示用戶目前已完成的待辦占全部待辦的比例,以便幫助用戶更好地安排時間,合理分配精力,提高完成任務的效率。同時我們希望當用戶看到待辦百分比逐漸增加時,會感到自己取得了進步,從而增加完成任務的動力。

wKgZomXdnK-AV7STAAAbwdl7URs266.png

再下方是我們具體顯示在所選擇的日子和選擇的對應待辦單下,對應的全部“待完成”、“已過期”和“已完成”的待辦。這三者都可以通過點擊其名稱邊上的三角形,以打開或折疊對應分類中的待辦

wKgZomXdnLaANt3bAAAqtCJSxZA456.pngwKgaomXdnL-AdRauAAAKFNYNgP4826.png

這三者中,“待完成”指的是,在用戶設置的對應時間內(nèi),但還未完成或未達到全部完成次數(shù)的待辦。

wKgaomXdneuAYO4jAAAKMWHmOy409.jpegwKgZomXdnMuAJRu-AAAKMWHmOy4455.pngwKgZomXdneuADY1jAAAIyI4qpY465.jpegwKgZomXdnNOARZ5jAAAIyI4qpY4298.png

這兩者可以在待辦第二行中看出區(qū)別,有“n/m”的是需要多次完成,且未全部完成的待辦,否則是未完成的單次待辦。

在一條待辦中,還有其他的信息,其中最左邊的圈的顏色,對應了用戶將該待辦存放在哪個待辦單中,即這個確認框的顏色和該待辦所歸類的待辦單的顏色保持一致。

第二欄中的感嘆號表示用戶是否將其列為重要待辦,若為重要代辦,也會在四象限中對應展示;五角星對應的是該待辦是否被用戶放入“我的收藏”;鬧鐘圖標對應的是用戶是否為該待辦設置了鬧鐘提醒。后面的“有效時間 | 循環(huán)規(guī)則”中,前面的表示該待辦的有效時間,全天指全天有效,如果給的是某一時間段就是在這每一時間段有效。后面的次數(shù)則是代表該待辦的重復方式,如“每天”就是每天出現(xiàn),“每三天”就是每三天現(xiàn)需要完成一次。

“已過期”則是指,在當天中,當前時間已經(jīng)過了該待辦對應的有效時間,故為已過期。其中已過期的待辦可以順延,點擊右側(cè)的順延即可,若要全部順延,則點擊“已過期”右邊的全部順延即可。

wKgaomXdneyAfpWkAAAWNDmjHuI37.jpegwKgaomXdnOWABUVKAAAWNDmjHuI533.png


“已完成”則是指已經(jīng)完成了的待辦,即完全完成(即多次的任務也全部完成)。其中,已完成的任務前面的勾是填充式的,且標題會有刪除線,并在待辦第二行中末尾會顯示完成時間。

wKgZomXdne2AWhdHAAArbcSQKEQ69.jpegwKgZomXdnOuAI9ZEAAArbcSQKEQ268.png

此時長按前面的勾選部分,可以減少一次完成次數(shù),使得該待辦重新成為待完成狀態(tài)。

如果是部分完成,前面的勾是線條式的。

如果長按待辦主體部分,可以呼出如下界面:

wKgaomXdne2AJ-0TAAAOgK644yk54.jpegwKgZomXdnPSAQRRbAAAOgK644yk408.png

此時可以通過待辦后方的復選框,選擇對應待辦,進行收藏,移動,刪除,全選等操作。其中移動,刪除點擊后,對應界面如圖:

wKgZomXdne6AW45fAAAs6VGHtKI29.jpegwKgZomXdnPuAdFccAAAs6VGHtKI013.pngwKgZomXdnQiAORSDAAAhfjMMqAQ196.png

右下角的添加按鈕,單擊可以呼出添加待辦的添加界面,若是打開了設備同步,可以長按添加按鈕,一鍵向所有設備同步或是接收最新數(shù)據(jù)。

wKgZomXdnOuAI9ZEAAArbcSQKEQ268.pngwKgZomXdnR-AZy0DAAAz6H9cZLE393.png

點擊待辦單的選擇欄最后一行,可以進行待辦分類的選擇以及待辦單添加的操作。

若是添加待辦單,則可以在跳出界面進行名字,顏色的選擇,如圖:

wKgZomXdnS6AXLVbAAAjOVlTluA421.png

4.4 添加界面

通過清單界面右下角的添加按鈕單擊進入,再未展開前界面如下,可以輸入待辦名稱,選擇放入的待辦單,選擇是否收藏,是否重要,并選擇其生效時間。創(chuàng)建完成后點擊保存即可。

wKgaomXdnTeAd2xfAAB5WrdqNBA454.png

展開后的添加界面如下,可以添加備注,設置是否提醒以及對應提醒時間,設置重復規(guī)律,有效時間等。

wKgaomXdnUOAb3VKAABC9E0Njbs898.png

4.5 日歷界面

在頁簽中,點擊日歷即可切換到日歷界面。默認的日歷界面會顯示當前月份中,每一天待辦的縮略,并會給出完成待辦比例的百分比環(huán)。

在左上角,有兩個下拉選擇按鈕,可以選擇月份和待辦單。選擇后,下方日歷會根據(jù)所選的情況顯示對應的內(nèi)容。同時在當前日歷界面左右滑動可以切換月份。

wKgZomXdnU2AJD1ZAACEAzZ7w4M812.png

若是選擇了某一天,或是點擊了下方的上箭頭,則會在下方顯示對應日子對應待辦單的全部待辦情況,其顯示規(guī)則與清單界面相同,故不再贅述。

wKgZomXdnViAKeQuAACF4I65jvg563.png

其中上方的日歷部分會保留當前周的預覽,此時若左右滑動日歷部分,則是切換上下周情況。

4.6 四象限界面

在頁簽中,點擊四象限即可切換到四象限界面。

在四象限界面中,整個界面被分為四界面,分別是“重要且緊急”、“重要但不緊急”、“不重要但緊急”、“不重要且不緊急”。這里的重要是根據(jù)用戶在設置待辦中,是否選擇了感嘆號,即由用戶手動勾選是否重要。而緊急,則是由軟件自身根據(jù)算法,判斷當前時間與用戶設定的待辦有效時間間隔來判斷是否緊急。判斷后,會在根據(jù)用戶上方兩個下拉選擇欄選擇的條目篩選后,將該分類中的待辦,根據(jù)是否重要和是否緊急,分別顯示在四象限中。

wKgaomXdnWWAeuQiAAB54pV1-Xc893.png

其中,可以根據(jù)前方判定框,了解該待辦處于什么情況??湛驗槲赐瓿?,線條勾為完成部分,填充勾為全部完成。

同時點擊對應框的標題,可以打開該象限,觀察對應待辦的詳細細節(jié)。打開后再次點擊象限名可以收起該象限。

wKgaomXdnXCAZjeMAABnqeGOWnM029.png

4.7 設置界面

在頁簽中,點擊設置即可切換到設置界面。

“本地備份”點擊后可以打開對應界面,之后可以開啟自動備份,即在每次退出應用時候自動備份?;蛘呖梢栽谙路近c擊立即備份以手動備份。同時可以點擊右側(cè)的刷新查看當前所有備份情況。

點擊“多端同步”后打開界面,開啟后可以下載或者上傳數(shù)據(jù)并儲存在分布式數(shù)據(jù)庫中。并且在下方可以查看已經(jīng)連接的設備情況。

點擊“編輯待辦單”,可以對待辦單進行編輯,進行刪除,改名和更改顏色的操作。

wKgaomXdnXqAAwEhAAAqncjRam0184.png

點擊“主題色”,可以對軟件主題色進行更改,更改后需要重啟軟件才能生效。

wKgaomXdne6AaqKPAAAycMCyyz090.jpegwKgaomXdnYWAM847AAAycMCyyz0234.png


點擊“默認重復時長”,可以更改默認重復時長,以便于用戶在創(chuàng)建待辦時,選擇重復時長更加方便。

點擊“默認提醒時間”,可以更改默認提醒時間,以便于用戶在創(chuàng)建待辦時,設置提醒時間時更加快捷。

點擊“星期開始于”,可以根據(jù)用戶習慣,更改由星期一開始或者星期日開始一周。

點擊“時間制式設置”,可以根據(jù)用戶習慣,更改時間制式為 12 小時制或 24 小時制。

點擊“常見問題”,可以查看一些常見問題的解答并了解咨詢方式。

wKgZomXdne-AWX4sAACLiHy7WAE17.jpegwKgZomXdnY-AJES0AACLiHy7WAE739.png


點擊“用戶協(xié)議與隱私聲明”,可以查看本軟件的用戶協(xié)議與隱私聲明。

wKgaomXdne-AVCvNAACnJJLbg7031.jpegwKgZomXdnZOAYFLEAACnJJLbg70597.png

點擊“關(guān)于”,可以了解更多關(guān)于本軟件的信息,如軟件版本,官網(wǎng)網(wǎng)址,郵箱等。

五、總結(jié)

本文主要介紹了一個 oh 原生的,具有多端適配和同步備份功能的待辦清單類應用,不僅可以讓用戶添加、編輯、刪除、篩選、歸檔自己的任務,還可以讓用戶設置任務的優(yōu)先級、截止日期、重復規(guī)則、提醒方式等多種屬性,讓用戶更靈活地管理自己的任務。我們還提供了日歷頁面、四象限頁面、多種萬能卡片等方式拓展用戶的使用場景,優(yōu)化用戶的使用體驗。解決了市面上主流待辦清單類 APP 要么功能過于復雜,要么功能過于簡單,還有云端數(shù)據(jù)同步和安全性之間矛盾的問題。

本應用的優(yōu)勢主要在于支持多設備,可以在不同的設備間交換和同步用戶的數(shù)據(jù),讓用戶可以隨時隨地地查看和更新自己的任務清單。這些功能全都是在本地進行的,不必擔心數(shù)據(jù)泄露。同時因為是原生應用,我們的應用流暢穩(wěn)定,占用空間小,設計也符合系統(tǒng)一致性。

還需要改進的地方主要是本地備份暫未做加密優(yōu)化,有隱私數(shù)據(jù)泄露風險。同時暫未完成對其他端設備的支持(比如手表),這主要是最低支持 API 版本為 8 造成的影響,期待后續(xù)軟件的更新。
為了能讓大家更好的學習鴻蒙 (OpenHarmony) 開發(fā)技術(shù),這邊特意整理了《鴻蒙 (OpenHarmony)開發(fā)學習手冊》,希望對大家有所幫助:

《鴻蒙(Harmony OS)開發(fā)學習手冊》

入門必看:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.應用開發(fā)導讀(ArKTS)
2.……

wKgaomXW6N2AJp9uAAQXRxEAprs547.png

HarmonyOS概念:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.系統(tǒng)定義
2.技術(shù)框架
3.技術(shù)特性
4.系統(tǒng)安全

wKgaomXW6OSAFcCRAAV2zd2X_1s891.png

快速入門:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.基本概念
2.構(gòu)建第一個ArkTS應用
3.…

wKgZomXW6PuAA7wEAAKx6By_2Z8377.png

開發(fā)基礎知識:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.應用基礎知識
2.配置文件
3.應用數(shù)據(jù)管理
4.應用安全管理
5.應用隱私保護
6.三方應用調(diào)用管控機制
7.資源分類與訪問
8.學習ArkTS
9…

wKgZomXW6QaAM4niAAQzrXUUPik914.png

基于ArkTS 開發(fā):https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.Ability開發(fā)
2.UI開發(fā)
3.公共事件與通知
4.窗口管理
5.媒體
6.安全
7.網(wǎng)絡與鏈接
8.電話服務
9.數(shù)據(jù)管理
10.后臺任務(Background Task)管理
11.設備管理
12.設備使用信息統(tǒng)計
13.DFX
14.國際化開發(fā)
15.折疊屏系列
16………

wKgZomXW6RKATahiAAKz-zSMnR4040.png


審核編輯 黃宇



聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2621

    瀏覽量

    44074
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2126

    瀏覽量

    33125
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    【HarmonyOS 5】鴻蒙mPaaS詳解

    【HarmonyOS 5】鴻蒙mPaaS詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應用服務##鴻蒙金融類應用 (金融理財# 一、mPaaS是什么? mPaaS 是 Mobi
    的頭像 發(fā)表于 07-11 18:23 ?288次閱讀
    【HarmonyOS 5】<b class='flag-5'>鴻蒙</b>mPaaS詳解

    【HarmonyOS 5】金融應用開發(fā)鴻蒙組件實踐

    【HarmonyOS 5】金融應用開發(fā)鴻蒙組件實踐 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應用服務##鴻蒙金融類應用 (金融理財#
    的頭像 發(fā)表于 07-11 18:20 ?290次閱讀
    【HarmonyOS 5】金融應用<b class='flag-5'>開發(fā)</b><b class='flag-5'>鴻蒙</b>組件實踐

    使用DevEcoStudio 開發(fā)、編譯鴻蒙 NEXT_APP 以及使用中文插件

    # 使用DevEcoStudio 開發(fā)、編譯鴻蒙 NEXT_APP 以及使用中文插件 #鴻蒙開發(fā)工具 #DevEco Studio ##
    發(fā)表于 06-11 17:18

    鴻蒙5開發(fā)寶藏案例分享---一多開發(fā)實例(地圖導航)

    ? 鴻蒙開發(fā)隱藏寶藏大公開!手把手教你玩轉(zhuǎn)\"一多\"地圖導航案例 ? 大家好呀!我是你們的老朋友,今天要給大家扒一扒鴻蒙官方文檔里那些\"藏得深\"的實戰(zhàn)
    發(fā)表于 06-03 16:17

    鴻蒙5開發(fā)寶藏案例分享---折疊屏懸停態(tài)開發(fā)實踐

    ?【鴻蒙折疊屏開發(fā)寶藏指南】原來官方藏了這么多好東西!手把手教你玩轉(zhuǎn)懸停態(tài)開發(fā)**?** Hey小伙伴們!我是你們的老朋友XX,最近在肝鴻蒙折疊屏項目時,意外挖到了官方文檔里的隱藏寶藏
    發(fā)表于 06-03 12:04

    鴻蒙北向開發(fā)OpenHarmony5.0 DevEco Studio開發(fā)工具安裝與配置

    本文介紹OpenHarmony5.0 DevEco Studio開發(fā)工具安裝與配置,鴻蒙北向開發(fā)入門必備!由觸覺智能Purple Pi OH鴻蒙開發(fā)
    的頭像 發(fā)表于 03-28 18:05 ?874次閱讀
    <b class='flag-5'>鴻蒙</b>北向<b class='flag-5'>開發(fā)</b>OpenHarmony5.0 DevEco Studio<b class='flag-5'>開發(fā)</b>工具安裝與配置

    鴻蒙海報編輯器APP,分享端云一體化開發(fā)的經(jīng)驗!

    的編輯器,可以用來自己平時做圖或者設計海報之類的。而這次我將使用鴻蒙ArkTs來開發(fā)這款海報編輯器APP,順便分享一下我這次的開發(fā)經(jīng)驗。 項目架構(gòu)與
    的頭像 發(fā)表于 03-16 16:09 ?395次閱讀
    <b class='flag-5'>鴻蒙</b>海報編輯器<b class='flag-5'>APP</b>,分享端云一體化<b class='flag-5'>開發(fā)</b>的經(jīng)驗!

    AIGC入門及鴻蒙入門

    小巧、功能強大等特點,能夠在物聯(lián)網(wǎng)時代為用戶提供更加便捷、高效的服務。 2. 開發(fā)環(huán)境搭建: 下載并安裝DevEco Studio,這是華為官方為鴻蒙系統(tǒng)開發(fā)提供的集成
    發(fā)表于 01-13 10:32

    鴻蒙Flutter實戰(zhàn):14-現(xiàn)有Flutter 項目支持鴻蒙 II

    分別安裝官方的3.22版本,以及鴻蒙社區(qū)的 3.22.0 版本 3.搭建 Flutter鴻蒙開發(fā)環(huán)境 參考文章《鴻蒙Flutter實戰(zhàn):01-搭建
    發(fā)表于 12-26 14:59

    鴻蒙機器人與鴻蒙開發(fā)板聯(lián)動演示

    鴻蒙機器人與鴻蒙開發(fā)板聯(lián)動演示,機器人的角色為迎賓機器人,開發(fā)板負責人賓客出現(xiàn)監(jiān)聽
    發(fā)表于 12-02 14:55

    鴻蒙原生開發(fā)手記:01-元服務開發(fā)

    簡介 元服務是鴻蒙中的一種輕量應用形態(tài),無需下載,直接運行。類似于微信小程序,但與小程序不同的是,元服務更加輕量。 元服務使用原生開發(fā),是系統(tǒng)級提供的,無論從易用性、性能、體驗上,都要比小程序好
    發(fā)表于 11-14 17:28

    Taro鴻蒙技術(shù)內(nèi)幕系列(一):如何將React代碼跑在ArkUI上

    基于 Taro 打造的京東鴻蒙 APP 已跟隨鴻蒙 Next 系統(tǒng)公測,本系列文章將深入解析 Taro 如何實現(xiàn)使用 React 開發(fā)高性能鴻蒙
    的頭像 發(fā)表于 10-25 17:24 ?753次閱讀
    Taro<b class='flag-5'>鴻蒙</b>技術(shù)內(nèi)幕系列(一):如何將React代碼跑在ArkUI上

    鴻蒙Flutter實戰(zhàn):08-如何調(diào)試代碼

    # 鴻蒙Flutter實戰(zhàn):如何調(diào)試代碼 ## 1.環(huán)境搭建 參考文章[鴻蒙Flutter實戰(zhàn):01-搭建開發(fā)環(huán)境](https://gitee.com/zacks
    發(fā)表于 10-23 16:29

    鴻蒙Flutter實戰(zhàn):07混合開發(fā)

    參考資料 撰寫雙端平臺代碼(插件編寫實現(xiàn)) 鴻蒙Flutter功能開發(fā) 鴻蒙add-to-app示例 如何使用混合開發(fā) module 【
    發(fā)表于 10-23 16:00

    新型OLED可實現(xiàn)小巧輕便的夜視鏡

    密歇根大學的研究人員開發(fā)出一種新型有機發(fā)光二極管(OLED),可以用輕便的眼鏡取代笨重的夜視鏡,使其更便宜、更實用,適合長時間使用。他們的研究成果發(fā)表在《自然·光子學》(Nature
    的頭像 發(fā)表于 10-12 10:44 ?584次閱讀