From 2411199174f0e4b698984f0af6b8699214fc51da Mon Sep 17 00:00:00 2001 From: Jolie <412895109@qq.com> Date: Sat, 27 Dec 2025 16:44:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(live=5Froom):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=9B=B4=E6=92=AD=E9=97=B4=E8=BE=93=E5=85=A5=E5=AF=B9=E8=AF=9D?= =?UTF-8?q?=E6=A1=86=E9=81=AE=E7=BD=A9=E5=B1=82=E7=82=B9=E5=87=BB=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 Positioned.fill 遮罩层组件 - 实现点击遮罩层隐藏对话框和键盘的功能 - 使用 GestureDetector 拦截点击事件 - 调用 FocusScope.of(context).unfocus() 隐藏键盘 - 调用 _hideInputDialog() 方法隐藏对话框 - 设置遮罩层颜色为透明 - 调整组件层级结构确保对话框在遮罩层上方 --- lib/pages/discover/live_room_page.dart | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/pages/discover/live_room_page.dart b/lib/pages/discover/live_room_page.dart index ff7bc85..1611e89 100644 --- a/lib/pages/discover/live_room_page.dart +++ b/lib/pages/discover/live_room_page.dart @@ -344,7 +344,21 @@ class _LiveRoomPageState extends State { // SVGA 动画播放组件 const SvgaPlayerWidget(), // 输入对话框 - if (_showInputDialog) + if (_showInputDialog) ...[ + // 遮罩层,点击时隐藏对话框和键盘(放在对话框下方,对话框会在上面拦截点击) + Positioned.fill( + child: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () { + // 隐藏键盘 + FocusScope.of(context).unfocus(); + // 隐藏对话框 + _hideInputDialog(); + }, + child: Container(color: Colors.transparent), + ), + ), + // 输入对话框(放在遮罩层上面,会自动拦截点击事件) AnimatedPositioned( duration: const Duration(milliseconds: 200), curve: Curves.easeOut, @@ -358,6 +372,7 @@ class _LiveRoomPageState extends State { onClose: _hideInputDialog, ), ), + ], ], ), ),