From b7ae2793473959d570303872bc613d1fdfc99daa Mon Sep 17 00:00:00 2001 From: Eric85710 Date: Sat, 16 May 2026 16:17:52 +0800 Subject: [PATCH] dm-12 --- .../Detail/Message_Messaging_ViewModel.kt | 50 ++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Message_Messaging_ViewModel.kt b/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Message_Messaging_ViewModel.kt index 80f010d..802dc32 100644 --- a/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Message_Messaging_ViewModel.kt +++ b/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Message_Messaging_ViewModel.kt @@ -1,4 +1,52 @@ package com.example.login_v3.home.Message.ViewModel.Detail -class Message_Messaging_ViewModel { + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.example.login_v3.data.repository.dm.ChatRoomsRepository +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.launch +import javax.inject.Inject +import androidx.compose.runtime.State +import androidx.compose.runtime.mutableStateOf +import com.example.login_v3.data.api.api_class.Message + + +sealed interface MessagesUiState { + object Loading : MessagesUiState + data class Success(val messages: List) : MessagesUiState + data class Error(val message: String) : MessagesUiState +} + +@HiltViewModel +class ChatViewModel @Inject constructor( + private val repository: ChatRoomsRepository +) : ViewModel() { + + // 內部的可變狀態,預設為 Loading + private val _uiState = mutableStateOf(MessagesUiState.Loading) + + // 公開給 Compose UI 讀取的唯讀狀態 + val uiState: State = _uiState + + /** + * 根據 roomId 獲取聊天訊息 + */ + fun loadMessages(roomId: String) { + viewModelScope.launch { + // 切換回載入中狀態(適用於切換房間或重新整理時) + _uiState.value = MessagesUiState.Loading + + // 呼叫你的 Repository 方法 + repository.getChatMessages(roomId) + .onSuccess { response -> + // 成功:將訊息列表塞入 Success 狀態 + _uiState.value = MessagesUiState.Success(messages = response.messages) + } + .onFailure { exception -> + // 失敗:擷取錯誤訊息並塞入 Error 狀態 + _uiState.value = MessagesUiState.Error(message = exception.message ?: "未知錯誤") + } + } + } } \ No newline at end of file