You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

打开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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:20:00