diff --git a/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Messaging.kt b/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Messaging.kt index 79856b5..10a3fdf 100644 --- a/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Messaging.kt +++ b/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Messaging.kt @@ -41,6 +41,7 @@ import com.example.login_v3.navigation.Screen @Composable fun MessageMessaging( roomId: String, + roomName: String, navController: NavController, onBackClick: () -> Unit, viewModel: ChatViewModel = hiltViewModel() @@ -55,7 +56,7 @@ fun MessageMessaging( topBar = { TopAppBar( //need to be sender id - title = { Text("聊天室 ($roomId)") }, + title = { Text(roomName) }, ) } ) { innerPadding -> diff --git a/app/src/main/java/com/example/login_v3/home/Message/UI/Message.kt b/app/src/main/java/com/example/login_v3/home/Message/UI/Message.kt index d5bb098..0cce87b 100644 --- a/app/src/main/java/com/example/login_v3/home/Message/UI/Message.kt +++ b/app/src/main/java/com/example/login_v3/home/Message/UI/Message.kt @@ -87,10 +87,9 @@ sealed class Screen(val route: String) { object CreateContact : Screen("create_contact") object FriendsList : Screen("friends_list") object ScanQRcode : Screen("scan_QRcode") - object MessageMessaging : Screen("message_messaging?roomId={roomId}") { - fun createRoute(roomId: String): String { - // 🚀 修正:直接帶入原始 roomId,不進行 URL Encode - return "message_messaging?roomId=$roomId" + object MessageMessaging : Screen("message_messaging?roomId={roomId}&roomName={roomName}") { + fun createRoute(roomId: String, roomName: String): String { + return "message_messaging?roomId=$roomId&roomName=$roomName" } } } @@ -105,14 +104,13 @@ fun Tg_Message( navController = navController, startDestination = Screen.Messages.route, ) { - // 你的訊息主頁面 // 你的訊息主頁面 composable(Screen.Messages.route) { Loaded_Tg_Message( navController = navController, - onRoomClick = { roomId -> - // ✅ 使用你寫好的 createRoute(roomId) 帶入參數並導航 - val route = Screen.MessageMessaging.createRoute(roomId) + // 🚀 完美接起傳出來的兩個參數,不再發生 No value passed 的狀況! + onRoomClick = { roomId, roomName -> + val route = Screen.MessageMessaging.createRoute(roomId, roomName) navController.navigate(route) } ) @@ -144,14 +142,22 @@ fun Tg_Message( type = NavType.StringType nullable = true defaultValue = "" + }, + // 🚀 修正:新增接收 roomName 的導航參數 + navArgument("roomName") { + type = NavType.StringType + nullable = true + defaultValue = "聊天室" } ) ) { backStackEntry -> - // 🚀 修正:直接抓取 arguments 的字串,不再進行 URL Decode val roomId = backStackEntry.arguments?.getString("roomId").orEmpty() + // 🚀 修正:抓取名字 + val roomName = backStackEntry.arguments?.getString("roomName") ?: "聊天室" MessageMessaging( roomId = roomId, + roomName = roomName, // 🚀 傳入 UI 中 navController = navController, onBackClick = { 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) @Composable fun Loaded_Tg_Message( navController: NavController, viewModel: ChatRoomsViewModel = hiltViewModel(), - onRoomClick: (String) -> Unit = {} + onRoomClick: (String, String) -> Unit = { _, _ -> } ) { var expanded by remember { mutableStateOf(false) } @@ -288,8 +300,8 @@ fun Loaded_Tg_Message( RoomItem( navController = navController, room = room, - onClick = { - onRoomClick(room.roomId) + onClick = { roomId, roomName -> + onRoomClick(roomId, roomName) } ) Spacer(modifier = Modifier.height(6.dp)) @@ -307,16 +319,18 @@ fun Loaded_Tg_Message( fun RoomItem( navController: NavController, room: ChatRoom, - onClick: (String) -> Unit + // 🚀 修正 2:onClick 改成攜帶兩個參數 (roomId, roomName) + onClick: (String, String) -> Unit ) { Card( modifier = Modifier .fillMaxWidth() .padding(horizontal = 12.dp, vertical = 6.dp) // 增加外邊距,讓 Card 之間有呼吸感 .clickable { - // 💡 修改這裡:動態帶入真實的 roomId - navController.navigate(Screen.MessageMessaging.createRoute(room.roomId)) - }, + // 🚀 修正:直接呼叫傳進來的 lambda 函式即可,不要包含 createRoute 唷! + onClick(room.roomId, room.displayTitle) + } + , shape = RoundedCornerShape(16.dp), // 較大的圓角看起來更現代 colors = CardDefaults.cardColors( containerColor = Color.Transparent // ✅ 透明背景