From db205f100de20acaade04303ccb069fec12a491a Mon Sep 17 00:00:00 2001 From: Frank Koenders Date: Wed, 26 Jul 2023 15:21:36 +0200 Subject: [PATCH 1/2] fix: ensure hardware pointer events do not reach underlying webview This fixes the issue on iOS and Android (including Chromebook) where hardware mouse events were being captured by an underlying webview. --- packages/pointer_interceptor/lib/src/mobile.dart | 15 ++++++++++++++- packages/pointer_interceptor/pubspec.yaml | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/pointer_interceptor/lib/src/mobile.dart b/packages/pointer_interceptor/lib/src/mobile.dart index 8d645ffbcfe3..a939d58b1112 100644 --- a/packages/pointer_interceptor/lib/src/mobile.dart +++ b/packages/pointer_interceptor/lib/src/mobile.dart @@ -2,7 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:io'; + import 'package:flutter/widgets.dart'; +import 'package:webview_flutter/webview_flutter.dart'; /// A [Widget] that prevents clicks from being swallowed by [HtmlElementView]s. class PointerInterceptor extends StatelessWidget { @@ -29,6 +32,16 @@ class PointerInterceptor extends StatelessWidget { @override Widget build(BuildContext context) { - return child; + if (Platform.isAndroid || Platform.isIOS) { + return Stack(alignment: Alignment.center, children: [ + Opacity( + opacity: 0, + child: WebViewWidget(controller: WebViewController()), + ), + child, + ]); + } else { + return child; + } } } diff --git a/packages/pointer_interceptor/pubspec.yaml b/packages/pointer_interceptor/pubspec.yaml index 22106a80db7c..7fbb60ba8d5f 100644 --- a/packages/pointer_interceptor/pubspec.yaml +++ b/packages/pointer_interceptor/pubspec.yaml @@ -11,6 +11,7 @@ environment: dependencies: flutter: sdk: flutter + webview_flutter: ^4.0.7 dev_dependencies: flutter_test: From 2c57fd553060bcf8923f05beaaf692ce8f60f395 Mon Sep 17 00:00:00 2001 From: Frank Koenders Date: Wed, 26 Jul 2023 16:19:54 +0200 Subject: [PATCH 2/2] fix: ensure work-around works properly on iOS --- packages/pointer_interceptor/lib/src/mobile.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pointer_interceptor/lib/src/mobile.dart b/packages/pointer_interceptor/lib/src/mobile.dart index a939d58b1112..0882a61d05c0 100644 --- a/packages/pointer_interceptor/lib/src/mobile.dart +++ b/packages/pointer_interceptor/lib/src/mobile.dart @@ -35,7 +35,7 @@ class PointerInterceptor extends StatelessWidget { if (Platform.isAndroid || Platform.isIOS) { return Stack(alignment: Alignment.center, children: [ Opacity( - opacity: 0, + opacity: 0.01, // With 0 the work-around does not work on iOS. child: WebViewWidget(controller: WebViewController()), ), child,