This commit is contained in:
Eric85710 2026-06-03 16:08:27 +08:00
parent d1b1f999c2
commit e8119560b2

View file

@ -5,6 +5,7 @@ import android.util.Log
import android.widget.Toast import android.widget.Toast
import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.animation.AnimatedContent
import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
@ -184,30 +185,35 @@ fun MessageMessaging(
} }
) )
}, },
//to be animated
bottomBar = { bottomBar = {
if (actionMessage != null) { // 👈 1. 直接將 actionMessage 作為 targetState
// 顯示動作選單 AnimatedContent(
MessageActionMenuRow( targetState = actionMessage,
message = actionMessage!!, label = "BottomBarSwitchAnimation"
onCancel = { viewModel.clearActionMessage() }, // 👈 呼叫 ViewModel 的清除 ) { currentActionMessage -> // 👈 2. 這裡拿到的 currentActionMessage 在動畫期間會保持不變
onReplyClick = { msg -> if (currentActionMessage != null) {
viewModel.setReplyingMessage(msg) // 👈 原本的回覆邏輯 // 顯示動作選單
viewModel.clearActionMessage() // 👈 點擊回覆後關閉動作選單 MessageActionMenuRow(
}, message = currentActionMessage, // 👈 3. 乾淨安全,再也不需要寫 !! 了
onDeleteClick = { msg -> onCancel = { viewModel.clearActionMessage() },
viewModel.deleteMessage(roomId, msg.id) // 👈 觸發刪除(內部成功後會自己關閉) onReplyClick = { msg ->
} viewModel.setReplyingMessage(msg)
) viewModel.clearActionMessage()
} else { },
// 顯示原本的輸入框 onDeleteClick = { msg ->
MessageInputBar( viewModel.deleteMessage(roomId, msg.id)
isLoading = sendStatus is SendMessageState.Loading, }
replyingMessage = replyingMessage, )
onCancelReply = { viewModel.setReplyingMessage(null) }, // 傳 null 等同清除 } else {
onSendClick = { content -> viewModel.sendMessage(roomId, content) }, // 顯示原本的輸入框
onImageSelected = { uri -> viewModel.uploadAttachment(roomId, uri) } MessageInputBar(
) isLoading = sendStatus is SendMessageState.Loading,
replyingMessage = replyingMessage,
onCancelReply = { viewModel.setReplyingMessage(null) },
onSendClick = { content -> viewModel.sendMessage(roomId, content) },
onImageSelected = { uri -> viewModel.uploadAttachment(roomId, uri) }
)
}
} }
} }
) { innerPadding -> ) { innerPadding ->