diff --git a/lib/pages/message/chat_page.dart b/lib/pages/message/chat_page.dart index d653424..39d2eeb 100644 --- a/lib/pages/message/chat_page.dart +++ b/lib/pages/message/chat_page.dart @@ -62,6 +62,9 @@ class _ChatPageState extends State { // 礼物弹窗相关 final activeGift = ValueNotifier(null); final giftNum = ValueNotifier(1); + + // ChatInputBar 的 GlobalKey,用于关闭底部面板 + final GlobalKey> _chatInputBarKey = GlobalKey>(); @override void initState() { @@ -309,6 +312,8 @@ class _ChatPageState extends State { onTap: () { // 点击空白处收起键盘 FocusManager.instance.primaryFocus?.unfocus(); + // 关闭底部面板(表情、更多选项、语音输入) + ChatInputBar.closePanels(_chatInputBarKey); }, behavior: HitTestBehavior.opaque, child: Column( @@ -377,6 +382,7 @@ class _ChatPageState extends State { ), // 使用抽离的聊天输入栏组件 ChatInputBar( + key: _chatInputBarKey, onSendMessage: (message) async { await controller.sendMessage(message); }, diff --git a/lib/widget/message/chat_input_bar.dart b/lib/widget/message/chat_input_bar.dart index f761f96..f026941 100644 --- a/lib/widget/message/chat_input_bar.dart +++ b/lib/widget/message/chat_input_bar.dart @@ -31,6 +31,14 @@ class ChatInputBar extends StatefulWidget { @override State createState() => _ChatInputBarState(); + + // 静态方法:通过 key 关闭面板 + static void closePanels(GlobalKey? key) { + final state = key?.currentState; + if (state != null && state is _ChatInputBarState) { + state.closeAllPanels(); + } + } } class _ChatInputBarState extends State { @@ -109,6 +117,11 @@ class _ChatInputBarState extends State { } } + // 公开方法:从外部关闭所有面板 + void closeAllPanels() { + _closeAllPanels(); + } + @override void initState() { super.initState();