dm-12
This commit is contained in:
parent
b78016826f
commit
b7ae279347
1 changed files with 49 additions and 1 deletions
|
|
@ -1,4 +1,52 @@
|
||||||
package com.example.login_v3.home.Message.ViewModel.Detail
|
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<Message>) : MessagesUiState
|
||||||
|
data class Error(val message: String) : MessagesUiState
|
||||||
|
}
|
||||||
|
|
||||||
|
@HiltViewModel
|
||||||
|
class ChatViewModel @Inject constructor(
|
||||||
|
private val repository: ChatRoomsRepository
|
||||||
|
) : ViewModel() {
|
||||||
|
|
||||||
|
// 內部的可變狀態,預設為 Loading
|
||||||
|
private val _uiState = mutableStateOf<MessagesUiState>(MessagesUiState.Loading)
|
||||||
|
|
||||||
|
// 公開給 Compose UI 讀取的唯讀狀態
|
||||||
|
val uiState: State<MessagesUiState> = _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 ?: "未知錯誤")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue