diff --git a/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Messaging_detail/React_Emoji_Panel.kt b/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Messaging_detail/React_Emoji_Panel.kt index 356c003..de77762 100644 --- a/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Messaging_detail/React_Emoji_Panel.kt +++ b/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Messaging_detail/React_Emoji_Panel.kt @@ -29,25 +29,71 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp object EmojiProvider { - fun getSmileysAndPeople(): List { + fun getFullEmojiPack(): List { val emojis = mutableListOf() - // 1. 經典表情區間 (Smiley Faces): 😀 到 🪟 + // 1. 經典表情與人類行為 (Smiley Faces & People) + // 包含:😀 🤣 😘 🤠 🧑‍⚕️ 🏃 等 for (i in 0x1F600..0x1F64F) { - if (Character.isValidCodePoint(i)) { - emojis.add(String(Character.toChars(i))) - } + addCodePointIfValid(i, emojis) } - // 2. 常用手勢與身體部位 (Body & Gestures): 👍 👏 等 + // 2. 身體部位、手勢與愛心 (Body, Gestures & Hearts) + // 包含:👋 👍 👏 💪 👁️ ❤️ 💔 等 for (i in 0x1F440..0x1F49F) { - if (Character.isValidCodePoint(i)) { - emojis.add(String(Character.toChars(i))) - } + addCodePointIfValid(i, emojis) + } + + // 3. 額外追加的表情與角色 (Extended Smileys & Symbols) + // 包含:🥰 🤩 🥳 🥵 🥶 🥺 等較新版表情 + for (i in 0x1F900..0x1F9FF) { + addCodePointIfValid(i, emojis) + } + + // 4. 動物與大自然 (Animals & Nature) + // 包含:🐶 🐱 🦁 🦊 🐵 🦅 🌲 🌸 🌞 等 + for (i in 0x1F400..0x1F43F) { // 常見動物頭像 + addCodePointIfValid(i, emojis) + } + for (i in 0x1F1E6..0x1F1FF) { // 補充大自然元素 + addCodePointIfValid(i, emojis) + } + + // 5. 食物與飲料 (Food & Drink) + // 包含:🍏 🍓 🍔 🍕 🍣 🍦 🍺 ☕️ 等 + for (i in 0x1F354..0x1F37F) { + addCodePointIfValid(i, emojis) + } + + // 6. 運動、娛樂與活動 (Activities & Sports) + // 包含:⚽️ 🏀 🏈 🏆 🎮 🎤 🎬 🎨 等 + for (i in 0x1F3A0..0x1F3C4) { + addCodePointIfValid(i, emojis) + } + + // 7. 旅遊、交通工具與建築 (Travel & Places) + // 包含:🚗 ✈️ 🚀 🌋 🏖️ 🏥 🇨🇳 等 + for (i in 0x1F680..0x1F6FF) { + addCodePointIfValid(i, emojis) + } + + // 8. 物品、工具與雜項 (Objects & Tools) + // 包含:💻 📱 💡 🔑 🔨 📚 📦 💵 等 + for (i in 0x1F4A0..0x1F4FF) { + addCodePointIfValid(i, emojis) } return emojis } + + /** + * 輔助函式:檢查該 Unicode 編碼在當前系統是否有效,若有效則轉成 String 存入 + */ + private fun addCodePointIfValid(codePoint: Int, list: MutableList) { + if (Character.isValidCodePoint(codePoint)) { + list.add(String(Character.toChars(codePoint))) + } + } } @Composable @@ -56,8 +102,8 @@ fun MessageEmojiBar( onCancel: () -> Unit, modifier: Modifier = Modifier ) { - // emoji pack - val emojiList = remember { EmojiProvider.getSmileysAndPeople() } + // 💡 修正 1:改為呼叫你實際定義的 getFullEmojiPack() + val emojiList = remember { EmojiProvider.getFullEmojiPack() } Surface( modifier = modifier @@ -85,14 +131,16 @@ fun MessageEmojiBar( } } - // 網格滾動區:塞了幾百個也能流暢滑動 + // 網格滾動區 LazyVerticalGrid( columns = GridCells.Fixed(6), modifier = Modifier.fillMaxSize(), horizontalArrangement = Arrangement.spacedBy(12.dp), verticalArrangement = Arrangement.spacedBy(12.dp) ) { - items(emojiList) { emoji -> + // 💡 修正 2:明確指定 emoji 的型態為 String + // 這樣可以強迫編譯器去認對應的 items 擴充函式,徹底解決 Text(text = emoji) 報 Int 的錯誤 + items(emojiList) { emoji: String -> Box( modifier = Modifier .aspectRatio(1f)