一、前言
本學期,我有幸選修了《鴻蒙移動應用開發》課程。為完成期末作業並深化對鴻蒙開發邏輯的理解,我選擇基於開源社區優質代碼進行二次開發,在“模仿—分析—重構”的過程中探索鴻蒙應用的優化路徑與創新可能。儘管最終完成的項目在功能完整性、性能表現等方面仍存在一定不足,但整個實踐過程讓我對鴻蒙應用開發的底層邏輯、組件使用及項目架構有了更透徹的理解,切實將課堂所學轉化為了實操能力,幫助我更透徹地理解了鴻蒙應用開發的底層邏輯與核心知識點 ,為後續深入學習鴻蒙開發築牢了基礎。
二、概述
本項目是仿微信聊天應用,旨在通過還原社交軟件的核心交互邏輯,深度掌握鴻蒙ArkUI聲明式開發、數據管理及移動應用架構設計能力。項目以微信經典聊天界面為參照,實現了用户登錄註冊、消息列表動態渲染、文本消息收發、輸入框交互等核心功能,調用了免費的第三方機器人接口模擬聊天的流暢體驗。
雖然我這個版本的項目還沒接入真實的後端服務,像圖片、語音這類多媒體消息功能也還在慢慢完善中,但它已經覆蓋了移動聊天應用的核心開發流程。這不僅是對我這學期的一次檢驗,也為之後想拓展分佈式多端協同、音視頻通話這些進階功能打下了挺紮實的基礎。
三、項目介紹
3.1 用户登錄
登錄頁面:包含用户名 / 密碼輸入框、登錄按鈕和註冊跳轉入口。我用 @State 裝飾器綁定了輸入框的狀態,能實時校驗輸入內容不能為空;登錄按鈕會根據輸入內容是否完整動態啓用或禁用,禁用的時候按鈕會置灰,當輸入有誤時,會提示用户名或密碼錯誤。登錄成功則進入Index頁面,點擊註冊進入Register頁面。
登錄核心代碼如下:
private handleLogin(): void {
if (!this.canLogin() || this.isLoading) return;
this.isLoading = true;
setTimeout(() => {
this.isLoading = false;
// 登錄校驗+反饋+跳轉
if (this.username === 'admin' && this.password === '123456') {
this.saveLoginState('fake-jwt-token');
promptAction.showToast({ message: '登錄成功' });
this.navigateToHome();
} else {
promptAction.showToast({ message: '用户名或密碼錯誤' });
}
}, 1500);
}
// 跳轉到主頁
private navigateToHome(): void {
router.pushUrl({ url: 'pages/Index' })
.catch((err) => {
console.error('跳轉主頁失敗:', err);
promptAction.showToast({ message: '頁面跳轉失敗' });
});
}
// 跳轉到註冊頁面
private navigateToRegister(): void {
router.pushUrl({ url: 'pages/Register' })
.catch((err) => {
console.error('跳轉註冊頁失敗:', err);
promptAction.showToast({ message: '註冊頁面跳轉失敗' });
});
}
3.2 用户註冊
註冊頁面:用ArkUI組件搭的表單佈局,頁面包含暱稱、密碼、確認密碼輸入框,還有協議勾選框,註冊按鈕會根據輸入是否合法動態切換狀態。註冊成功後直接跳轉到主頁進入。如果已有賬號,則可點擊立即登陸,返回登錄界面直接登錄。
核心代碼如下:
// 暱稱
TextInput({ placeholder: '請輸入暱稱' })
.onChange((val: string) => this.nickname = val)
.width('100%')
.height(48)
.backgroundColor('#F5F5F5')
.borderRadius(8)
.padding({ left: 16, right: 16 })
// 密碼
TextInput({ placeholder: '請輸入密碼' })
.type(InputType.Password)
.onChange((val: string) => this.password = val)
.width('100%')
.height(48)
.backgroundColor('#F5F5F5')
.borderRadius(8)
.padding({ left: 16, right: 16 })
// 確認密碼
TextInput({ placeholder: '請確認密碼' })
.type(InputType.Password)
.onChange((val: string) => this.confirmPassword = val)
.width('100%')
.height(48)
.backgroundColor('#F5F5F5')
.borderRadius(8)
.padding({ left: 16, right: 16 })
private canRegister(): boolean {
return this.agreeTerms &&
this.nickname.length > 0 &&
this.password.length >= 6 &&
this.confirmPassword.length > 0;
}
3.3 聊天功能
該功能在微信聊天界面基礎上,通過接入第三方AI機器人接口,實現實時對話交互,為用户提供自然流暢的智能問答、信息查詢、趣味閒聊等服務。其中,聊天界面複用了現有的聊天列表佈局,把用户發的消息氣泡做成右對齊的綠色,機器人的做成左對齊的灰色,雙方消息一眼就能分清;機器人現在只支持發文字消息,不過也預留了圖片、卡片消息的擴展空間。用户輸入內容後,會通過模擬接口觸發機器人回覆 。效果如下:
核心代碼如下:
sendTextMessage(content: string) {
//把輸入框輸入的數據添加到messageList
let message = new MessageInfoModel({
messageContent: content,
sendUser: currentUser,
connectUser: this.talker
} as MessageInfo)
this.messageList.push(message)
this.getResponseMessage(content)
//滾到底部
this.scroller.scrollEdge(Edge.Bottom)
//添加數據(沒有倉庫會自動創建)
StoreClass.addChatMessage(this.talker.user_id, message)
}
//定義機器人回覆方法
async getResponseMessage(content: string) {
try {
const res = await getMessageInfo(content)
let message = new MessageInfoModel({
messageContent: res?.info?.text,
sendUser: this.talker,
connectUser: currentUser
} as MessageInfo)
//將回復的信息存入消息列表
this.messageList.push(message)
//添加數據(沒有倉庫會自動創建)
StoreClass.addChatMessage(this.talker.user_id, message)
} catch (e) {
console.log(e)
}
this.scroller.scrollEdge(Edge.Bottom)
}
3.4 聯繫人搜索
該功能的設計仿照微信的聯繫人搜索:頁面頂部的搜索欄完全復刻微信原生樣式,採用淺灰色的圓角設計,搜索框內默認顯示 “搜索” 的提示文字;搜索框根據用户輸入關鍵詞進行篩選,精準定位到符合條件的聯繫人;若清空搜索框內的內容,聯繫人列表會自動恢復展示全部聯繫人,完全貼合微信原生的搜索使用習慣。效果如下:
核心代碼如下:
aboutToAppear(): void {
this.filterList = DefaultUserList
}
//篩選聯繫人方法
filterName() {
this.filterList = DefaultUserList.filter((user: UserInfo) => {
//如果聯繫人列表中存在輸入的聯繫人名稱,則將搜索的聯繫人數據返回filterList
return user.username.includes(this.searchName)
})
}
build() {
Column() {
//搜索欄
Row() {
Search({ placeholder: "搜索", value: $$this.searchName })
.backgroundColor($r("app.color.white"))
}
.width("100%")
.height(60)
.padding({
top: 10,
left: 10,
right: 10
})
3.5 項目不足及後續工作方向
1.在聊天方面目前只能做到簡單的文字交流,無法發送圖片、語音或其他多媒體消息。目前的聊天頁面只處理了文本消息的發送與機器人回覆,缺少文件選擇、拍照、語音錄製等交互邏輯,因此用户只能進行純文字聊天,限制了使用的豐富度與真實感。
2.界面中,右側加號內的菜單列出了“發起羣聊”“添加朋友”“掃一掃”“收付款”等選項,在項目中,這些功能僅停留在UI展示或路由跳轉層面,沒有實際業務邏輯與頁面實現,導致產品可用性與完整性不足。
3.底部導航雖然有“發現”入口,僅展示了其包含“朋友圈”“掃一掃”“聽一聽”“小程序”四個選項,但各功能入口同樣缺乏業務邏輯支持,無法進入真實內容頁。即這個模塊只是靜態佈局,沒有實現對應的功能頁面與數據交互。
總結:項目目前的核心短板集中在多媒體消息能力缺失、常用類功能未落地、以及發現頁面功能未整合可用。這些問題使得應用的交互維度單一、實用場景受限,後續需補充文件選擇與上傳、掃碼邏輯、朋友圈及小程序等模塊的完整實現,才能接近真實微信的使用體驗。
四、總結與展望
本項目以“仿微信聊天應用”為載體,完整經歷了從需求分析、架構設計到功能實現的全流程開發,對我而言既是一段系統的技術學習旅程,也是一次從理論認知到實踐落地的關鍵思維蜕變。