This commit is contained in:
Eric85710 2026-06-07 05:14:02 +08:00
parent 1a064c3537
commit bcd7b5f141
2 changed files with 38 additions and 0 deletions

View file

@ -95,4 +95,8 @@ dependencies {
implementation("androidx.emoji2:emoji2:$emoji2Version") implementation("androidx.emoji2:emoji2:$emoji2Version")
implementation("androidx.emoji2:emoji2-bundled:$emoji2Version") // 自帶字型包 implementation("androidx.emoji2:emoji2-bundled:$emoji2Version") // 自帶字型包
val roomVersion = "2.6.1" // 可以使用目前穩定的 2.6.1 或最新版本
implementation("androidx.room:room-runtime:$roomVersion")
implementation("androidx.room:room-ktx:$roomVersion") // 支援 Flow 必須要加這行
ksp("androidx.room:room-compiler:$roomVersion") // 使用 KSP 來編譯 Room 註解
} }

View file

@ -0,0 +1,34 @@
package com.example.login_v3.home.Message.ViewModel.Detail
import androidx.room.Dao
import androidx.room.Entity
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.PrimaryKey
import kotlinx.coroutines.flow.Flow
import androidx.room.Query
enum class MessageStatus { SENDING, SUCCESS, FAILED }
@Entity(tableName = "messages")
data class MessageEntity(
@PrimaryKey val id: String, // 臨時訊息可以用 UUID.randomUUID().toString()
val roomId: String,
val content: String,
val senderId: String,
val timestamp: Long,
val status: MessageStatus // 👈 核心:用來控制 UI 顯示樣式
)
@Dao
interface MessageDao {
// 💡 監聽特定聊天室的訊息流
@Query("SELECT * FROM messages WHERE roomId = :roomId ORDER BY timestamp ASC")
fun getMessagesFlow(roomId: String): Flow<List<MessageEntity>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertOrUpdate(message: MessageEntity)
@Query("DELETE FROM messages WHERE id = :id")
suspend fun deleteById(id: String)
}