打开Flutter Drawer后InAppWebview无法接收点击事件的解决方法
解决Flutter InAppWebView关闭Drawer后点击无响应的问题
针对iPhone 13 Pro Max上出现的这个问题,试试下面几个可行的解决思路:
强制WebView重新获取焦点
关闭Drawer后,调用InAppWebViewController的requestFocus()方法,让WebView重新接管触摸焦点,这样点击事件就能正常传递了。代码示例:drawer: Drawer( // 你的Drawer内容 ), onDrawerClosed: () { webViewController?.requestFocus(); },触发WebView视图重建(不重载页面)
有时候Drawer关闭后Flutter视图层级没更新到位,导致WebView的点击事件被拦截。可以给WebView绑定一个可变的GlobalKey,在Drawer关闭时更新这个key,触发WebView的Flutter侧视图重建,不会重载网页但能恢复交互。代码示例:GlobalKey webViewKey = GlobalKey(); // 关闭Drawer时更新key onDrawerClosed: () { setState(() { webViewKey = GlobalKey(); }); }, // InAppWebView使用这个key InAppWebView( key: webViewKey, initialUrlRequest: URLRequest(url: Uri.parse("你的网页地址")), onWebViewCreated: (controller) { webViewController = controller; }, )检查Drawer的关闭逻辑
确保Drawer是通过Navigator.of(context).pop()正常关闭的,避免自定义关闭逻辑导致模态屏障残留,拦截WebView的触摸事件。重新配置手势识别器
可能Drawer的手势和WebView的手势识别存在冲突,关闭Drawer后重新设置WebView的gestureRecognizers,明确允许点击和滚动手势:Set<Factory<OneSequenceGestureRecognizer>> gestureRecognizers = {}; onDrawerClosed: () { setState(() { gestureRecognizers = { Factory(() => TapGestureRecognizer()), Factory(() => VerticalDragGestureRecognizer()), }; }); }, InAppWebView( gestureRecognizers: gestureRecognizers, // 其他配置项 )
内容的提问来源于stack exchange,提问作者Joelfunk
相关产品推荐
相关产品推荐

