Valo Documentation
首頁
開發設置
專案結構
登入前單元
登入後單元
聊天對話單元
聊天系統
群組系統
認證
部署
故障排除
首頁
開發設置
專案結構
登入前單元
登入後單元
聊天對話單元
聊天系統
群組系統
認證
部署
故障排除
  • 專案文檔

    • 開發環境設置指南
    • 專案資料夾結構說明
    • - 聊天功能核心
    • - 群組目錄
    • 身份驗證
    • 登入前的單元
    • 登入後的單元
    • 聊天對話單元
    • 部署指南
    • 常見問題排解
    • 專案故事
    • 最初的那些痛

登入後的單元

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 update ChatGroup,沒有提供 avator...只有 Restful API 有提供

1-1. 聯絡列表

contacts_screen.dart: 共用樣板,主要封裝搜尋與 Tabs。

contacts_friends_screen.dart: 提供點擊好友 Tab,更換下方內容區。

contacts_groups_screen.dart: 提供點擊群組 Tab,更換下方內容區。

搜尋好友、搜尋群組、搜尋聊天,是如何實現即時查詢?

  1. search_state.dart 存放 搜尋文字。

  2. 在 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
  • 暱稱、生日、電話
    • 更新 Agora User Attributes
    • 電話:目前沒有驗證,會保存 國碼 (+886) ex: +886916376987
    • 生日:yyyy-MM-dd

2-2. 個人帳戶

帳戶安全和設定管理功能。

參考檔案:account_screen.dart

  • 帳戶
    • email 純顯示,在 註冊成功時,後端會幫忙保存至 Agora User Attributes
  • 更新密碼
    • 跟 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(成立好友)
Prev
登入前的單元
Next
聊天對話單元