Browse Source

feat(chat): 添加聊天输入栏面板控制功能

- 在 ChatInputBar 中添加静态方法 closePanels 用于关闭面板
- 实现 closeAllPanels 方法供外部调用关闭所有面板
- 在 ChatPage 中添加 GlobalKey 用于引用 ChatInputBar
- 点击空白区域时调用 ChatInputBar.closePanels 关闭底部面板
- 为 ChatInputBar 组件添加 key 属性以支持实例访问
master
Jolie 2 months ago
parent
commit
27f57ebb1c
2 changed files with 19 additions and 0 deletions
  1. 6
      lib/pages/message/chat_page.dart
  2. 13
      lib/widget/message/chat_input_bar.dart

6
lib/pages/message/chat_page.dart

@ -62,6 +62,9 @@ class _ChatPageState extends State<ChatPage> {
//
final activeGift = ValueNotifier<int?>(null);
final giftNum = ValueNotifier<int>(1);
// ChatInputBar GlobalKey
final GlobalKey<State<ChatInputBar>> _chatInputBarKey = GlobalKey<State<ChatInputBar>>();
@override
void initState() {
@ -309,6 +312,8 @@ class _ChatPageState extends State<ChatPage> {
onTap: () {
//
FocusManager.instance.primaryFocus?.unfocus();
//
ChatInputBar.closePanels(_chatInputBarKey);
},
behavior: HitTestBehavior.opaque,
child: Column(
@ -377,6 +382,7 @@ class _ChatPageState extends State<ChatPage> {
),
// 使
ChatInputBar(
key: _chatInputBarKey,
onSendMessage: (message) async {
await controller.sendMessage(message);
},

13
lib/widget/message/chat_input_bar.dart

@ -31,6 +31,14 @@ class ChatInputBar extends StatefulWidget {
@override
State<ChatInputBar> createState() => _ChatInputBarState();
// key
static void closePanels(GlobalKey? key) {
final state = key?.currentState;
if (state != null && state is _ChatInputBarState) {
state.closeAllPanels();
}
}
}
class _ChatInputBarState extends State<ChatInputBar> {
@ -109,6 +117,11 @@ class _ChatInputBarState extends State<ChatInputBar> {
}
}
//
void closeAllPanels() {
_closeAllPanels();
}
@override
void initState() {
super.initState();

Loading…
Cancel
Save