This commit is contained in:
Eric85710 2026-05-20 21:02:50 +08:00
parent a2bbd15109
commit 91882fecb1
2 changed files with 32 additions and 17 deletions

View file

@ -41,6 +41,7 @@ import com.example.login_v3.navigation.Screen
@Composable @Composable
fun MessageMessaging( fun MessageMessaging(
roomId: String, roomId: String,
roomName: String,
navController: NavController, navController: NavController,
onBackClick: () -> Unit, onBackClick: () -> Unit,
viewModel: ChatViewModel = hiltViewModel() viewModel: ChatViewModel = hiltViewModel()
@ -55,7 +56,7 @@ fun MessageMessaging(
topBar = { topBar = {
TopAppBar( TopAppBar(
//need to be sender id //need to be sender id
title = { Text("聊天室 ($roomId)") }, title = { Text(roomName) },
) )
} }
) { innerPadding -> ) { innerPadding ->

View file

@ -87,10 +87,9 @@ sealed class Screen(val route: String) {
object CreateContact : Screen("create_contact") object CreateContact : Screen("create_contact")
object FriendsList : Screen("friends_list") object FriendsList : Screen("friends_list")
object ScanQRcode : Screen("scan_QRcode") object ScanQRcode : Screen("scan_QRcode")
object MessageMessaging : Screen("message_messaging?roomId={roomId}") { object MessageMessaging : Screen("message_messaging?roomId={roomId}&roomName={roomName}") {
fun createRoute(roomId: String): String { fun createRoute(roomId: String, roomName: String): String {
// 🚀 修正:直接帶入原始 roomId,不進行 URL Encode return "message_messaging?roomId=$roomId&roomName=$roomName"
return "message_messaging?roomId=$roomId"
} }
} }
} }
@ -105,14 +104,13 @@ fun Tg_Message(
navController = navController, navController = navController,
startDestination = Screen.Messages.route, startDestination = Screen.Messages.route,
) { ) {
// 你的訊息主頁面
// 你的訊息主頁面 // 你的訊息主頁面
composable(Screen.Messages.route) { composable(Screen.Messages.route) {
Loaded_Tg_Message( Loaded_Tg_Message(
navController = navController, navController = navController,
onRoomClick = { roomId -> // 🚀 完美接起傳出來的兩個參數,不再發生 No value passed 的狀況!
// ✅ 使用你寫好的 createRoute(roomId) 帶入參數並導航 onRoomClick = { roomId, roomName ->
val route = Screen.MessageMessaging.createRoute(roomId) val route = Screen.MessageMessaging.createRoute(roomId, roomName)
navController.navigate(route) navController.navigate(route)
} }
) )
@ -144,14 +142,22 @@ fun Tg_Message(
type = NavType.StringType type = NavType.StringType
nullable = true nullable = true
defaultValue = "" defaultValue = ""
},
// 🚀 修正:新增接收 roomName 的導航參數
navArgument("roomName") {
type = NavType.StringType
nullable = true
defaultValue = "聊天室"
} }
) )
) { backStackEntry -> ) { backStackEntry ->
// 🚀 修正:直接抓取 arguments 的字串,不再進行 URL Decode
val roomId = backStackEntry.arguments?.getString("roomId").orEmpty() val roomId = backStackEntry.arguments?.getString("roomId").orEmpty()
// 🚀 修正:抓取名字
val roomName = backStackEntry.arguments?.getString("roomName") ?: "聊天室"
MessageMessaging( MessageMessaging(
roomId = roomId, roomId = roomId,
roomName = roomName, // 🚀 傳入 UI 中
navController = navController, navController = navController,
onBackClick = { onBackClick = {
navController.popBackStack() navController.popBackStack()
@ -163,12 +169,18 @@ fun Tg_Message(
} }
val ChatRoom.displayTitle: String
get() = when (roomType) {
"direct", "dm" -> partner?.displayName ?: partner?.username ?: "未知使用者"
else -> roomName ?: "未命名群組"
}
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun Loaded_Tg_Message( fun Loaded_Tg_Message(
navController: NavController, navController: NavController,
viewModel: ChatRoomsViewModel = hiltViewModel(), viewModel: ChatRoomsViewModel = hiltViewModel(),
onRoomClick: (String) -> Unit = {} onRoomClick: (String, String) -> Unit = { _, _ -> }
) { ) {
var expanded by remember { mutableStateOf(false) } var expanded by remember { mutableStateOf(false) }
@ -288,8 +300,8 @@ fun Loaded_Tg_Message(
RoomItem( RoomItem(
navController = navController, navController = navController,
room = room, room = room,
onClick = { onClick = { roomId, roomName ->
onRoomClick(room.roomId) onRoomClick(roomId, roomName)
} }
) )
Spacer(modifier = Modifier.height(6.dp)) Spacer(modifier = Modifier.height(6.dp))
@ -307,16 +319,18 @@ fun Loaded_Tg_Message(
fun RoomItem( fun RoomItem(
navController: NavController, navController: NavController,
room: ChatRoom, room: ChatRoom,
onClick: (String) -> Unit // 🚀 修正 2:onClick 改成攜帶兩個參數 (roomId, roomName)
onClick: (String, String) -> Unit
) { ) {
Card( Card(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(horizontal = 12.dp, vertical = 6.dp) // 增加外邊距,讓 Card 之間有呼吸感 .padding(horizontal = 12.dp, vertical = 6.dp) // 增加外邊距,讓 Card 之間有呼吸感
.clickable { .clickable {
// 💡 修改這裡:動態帶入真實的 roomId // 🚀 修正:直接呼叫傳進來的 lambda 函式即可,不要包含 createRoute 唷!
navController.navigate(Screen.MessageMessaging.createRoute(room.roomId)) onClick(room.roomId, room.displayTitle)
}, }
,
shape = RoundedCornerShape(16.dp), // 較大的圓角看起來更現代 shape = RoundedCornerShape(16.dp), // 較大的圓角看起來更現代
colors = CardDefaults.cardColors( colors = CardDefaults.cardColors(
containerColor = Color.Transparent // ✅ 透明背景 containerColor = Color.Transparent // ✅ 透明背景