dm-17
This commit is contained in:
parent
a2bbd15109
commit
91882fecb1
2 changed files with 32 additions and 17 deletions
|
|
@ -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 ->
|
||||||
|
|
|
||||||
|
|
@ -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 // ✅ 透明背景
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue