登入後的單元
1. 大廳


參考檔案: topic_screen.dart
中間層
topic_guard.dart。共用資料池刷新- 重置所有 Agora 的消息監聽
兩種特殊情況,進入時需判斷觸發。
- (右圖)
登入單元有提到死灰復燃情況。 - (左圖)
群組公開連結進入 APP 時。- 用戶準備加入群組,需先設定
匿名資料。 - 參考:
application.dart::whenDeepLink
- 用戶準備加入群組,需先設定
- (右圖)
topic_guard.dart
看程式碼中,有一段 (patch fix) 針對 Android 的情況,當時花了兩日時間,找不到根源原因,而後續硬想的解決方式。Bug 傳送門
在 Android 情況中,進入大廳,在第一次拉 Agora 群組資料時,ChatGroup 中的 ext 是空值
- 會需要
ext原因,Agora SDK updateChatGroup,沒有提供avator...只有Restful API有提供
1-1. 聯絡列表

contacts_screen.dart: 共用樣板,主要封裝搜尋與 Tabs。
contacts_friends_screen.dart: 提供點擊好友 Tab,更換下方內容區。
contacts_groups_screen.dart: 提供點擊群組 Tab,更換下方內容區。
搜尋好友、搜尋群組、搜尋聊天,是如何實現即時查詢?
search_state.dart存放搜尋文字。在 screen 中,自行 watch
搜尋文字與實現查詢邏輯。- 細節可以全域搜尋
大廳搜尋關鍵字-過濾邏輯都掛上此 Mark。
- 細節可以全域搜尋
1-2. 聊天列表

chats_screen.dart: 共用樣板,封裝 搜尋 與 Tabs。
chats_all_screen.dart: 點擊ALL Tab,更換內容。 chats_friends_screen.dart: 點擊好友 Tab。 chats_groups_screen.dart: 點擊群組 Tab。
共用項目:
conversation_list.dart:- 聊天清單的
共用資料池(包含後續的資料狀態)。 registerChatEvent: 用來監聽後續的新消息、已讀消息、其他即時事件,去更新共用資料池。
- 聊天清單的
conversation_board_item.dart: 一則聊天對象的項目。- 未讀狀態、名稱、頭貼、已讀未讀、最新日期...
- 以上資料會 watch
共用資料池,保持熱資料更新。 - 功能: 該項目
左滑,會滑出釘選聊天。
1-3. 設定

無
2. 設定
用戶個人設定和帳戶管理的主要入口。
參考檔案:settings_screen.dart
2-1. 個人資料

用戶個人資料編輯和管理功能。
參考檔案:profile_screen.dart
- 個人頭像設定
- 跟 Valo 叫一下上傳頭貼 API,得到
頭貼網址。 - 拿著
頭貼網址更新Agora User Attributes
- 跟 Valo 叫一下上傳頭貼 API,得到
- 暱稱、生日、電話
- 更新
Agora User Attributes - 電話:目前沒有驗證,會保存 國碼 (+886) ex: +886916376987
- 生日:yyyy-MM-dd
- 更新
2-2. 個人帳戶

帳戶安全和設定管理功能。
參考檔案:account_screen.dart
- 帳戶
- email 純顯示,在
註冊成功時,後端會幫忙保存至Agora User Attributes
- email 純顯示,在
- 更新密碼
- 跟 Valo API 溝通
- 刪除帳戶
- 跟 Valo API 溝通
- 30 日後刪除,在期間內
重新登入都會死灰復燃。
2-3. 黑名單

- 參考: Agora Contact BlockList
- 對象目前只有
好友,群組暫時沒有黑名單。 - 添加黑名單的時機:
- 好友對話/右上的
more/封鎖。
- 好友對話/右上的
- 該
好友是否為黑名單,已經封裝在Friend::isBlocked - 資料清單來源使用
共用資料池中的friends
2-4. 登出

- Agora Auth
- 清空
共用資料池的資料。 - 清理
認證資訊的資料,取消下次的自動登入。 - 停止 Agora 的各種監聽事件。
3. 新建群組
- 添加
好友 - 調整群組
名稱、照片、詳細描述 - 調整個人
匿名名稱、匿名頭貼
以上資料都會保留在 CreateGroupFormData,並封裝相關驗證邏輯。
- 點擊送出後,打 Valo API(建立群組),成功:得到一個 group id
- 後續 1:拿著 groupd id,再繼續打 Valo API (更新群組照片)
- 後續 2:得到
群組照片網址,使用 Agora SDK 保存到ChatGroup-custom的欄位- 格式:
{ "avator" : "https://cdn.valo.com/24234r1r135/1234124214.jpg" }
- 格式:
4. 添加好友
- 搜尋 Valo API(搜尋好友)
- 加入 Valo API(成立好友)