Flutter 在WebView上捕获onTap

Flutter 在WebView上捕获onTap,flutter,Flutter,考虑以下片段: body: GestureDetector( onTapUp: (details) => print('webview tapped $details'), child: WebView( initialUrl: 'https://google.com', javascriptMode: JavascriptMode.unrestricted, ), ), 我希

考虑以下片段:

      body: GestureDetector(
        onTapUp: (details) => print('webview tapped $details'),
        child: WebView(
          initialUrl: 'https://google.com',
          javascriptMode: JavascriptMode.unrestricted,
        ),
      ),
我希望在WebView上捕获tap事件,并避免在WebView中执行它们。我想亲自评估tap活动。但是,平移/缩放事件仍应由WebView处理

然而,上面的代码基本上什么都不做。WebView仍然获取并执行所有点击事件。

使用 属性,如下面的示例所示

WebView(
  initialUrl: someUrl,
  gestureRecognizers: Set()
    ..add(Factory<TapGestureRecognizer>(
      () => TapGestureRecognizer())),
)
WebView(
initialUrl:someUrl,
手势识别器:Set()
…添加(工厂)(
()=>TapGestureRecognitor()),
)
或者,用另一种方式写:

var verticalGestures = Factory<TapGestureRecognizer>(
  () => TapGestureRecognizer());
var gestureSet = Set.from([verticalGestures]);
return WebView(
  initialUrl: someUrl,
  gestureRecognizers: gestureSet,
);
var verticalstiges=工厂(
()=>TapGestureRecognitor());
var gestureSet=Set.from([垂直手势]);
返回WebView(
initialUrl:someUrl,
手势识别器:手势集,
);

我解开了这个谜。解决办法是:

      body: Stack(
        children: [
          WebView(
            initialUrl: 'https://google.com',
            javascriptMode: JavascriptMode.unrestricted,
          ),
          GestureDetector(
            behavior: HitTestBehavior.translucent,
            onTapDown: (_) => print('webview onTapDown $_'),
            onTapUp: (_) => print('webview onTapUp $_'),
            child: Container(),
          ),
        ],
      ),
解释很简单:

弗利特在向上指针时扫过手势竞技场,第一个手势识别器获胜。在问题的片段中,WebView本身是第一个手势识别器,而GestureDetector是第二个(儿童一级)


通过使用半透明覆盖层布置堆栈,覆盖层成为第一个识别器,WebView成为第二个识别器。因此,当竞技场被扫荡时,自定义手势检测器获胜。

是否有必要自己处理点击事件,或者只是阻止webview对点击事件做出反应?让我在问题中澄清一下。那么您只想禁用检测点击而不禁用任何其他功能?没错。我希望WebView处理平移等操作,但点击应由我的手势检测器处理,WebView忽略。为什么要使用
onTapUp
参数?对我不起作用,无法在WebView上获得焦点。有没有其他方法可以实现这种行为?