[英]Disable long press for Flutter WebView
我正在尋找一種方法來禁用 flutter WebView package 的長按手勢: https://pub.dev/packages/webview_flutter
我發現通過將 web 視圖包裝在 GestureDetector 中,我可以防止這種情況發生,效果很好。 但是,在第一次長按然后在 web 視圖中滾動后,不再正常工作。
抱歉,如果之前有人回答過這個問題,但我找不到任何關於如何做到這一點的信息,也找不到自己做的方法。
在此先感謝您的幫助/建議
好的,經過多次試驗和錯誤,我終於弄明白了
基本上你需要設置和重用 WebViewController (這是在onWebViewCreated
中設置的),然后在onPageFinished
里面你可以使用evaluateJavascript
function 注入你的 JavaScript 字符串。
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
class Example extends StatefulWidget {
@override
ExampleState createState() => ExampleState();
}
class ExampleState extends State<Example> {
final Completer<WebViewController> _controller = Completer<WebViewController>();
WebViewController _webViewController;
String jsString = 'document.addEventListener("contextmenu", event => event.preventDefault());';
@override
Widget build(BuildContext context) {
return Scaffold(
body: WebView(
initialUrl: 'Your URL goes here',
javascriptMode: JavascriptMode.unrestricted,
gestureNavigationEnabled: false,
onWebViewCreated: (WebViewController webViewController) async {
_webViewController = webViewController;
_controller.complete(webViewController);
},
onPageFinished: (_) {
_webViewController.evaluateJavascript(jsString);
},
),
);
}
}
class _CourseReadState extends State<CourseRead> {
final GlobalKey webViewKey = GlobalKey();
WebViewController? _webViewController;
final Completer<WebViewController> _controller =
Completer<WebViewController>();
String jsString =
'document.addEventListener("contextmenu", event => event.preventDefault());';
@override
void initState() {
super.initState();
if (Platform.isAndroid) {
WebView.platform = SurfaceAndroidWebView();
}
}
@override
Widget build(BuildContext ctx) {
return BlocBuilder<CourseReadBloc, CourseReadState>(
builder: (context, state) {
if (state is CourseReadLoaded) {
return Scaffold(
appBar: MyAppBar(height: 60.h, title: 'title'),
body: WebView(
key: webViewKey,
gestureNavigationEnabled: false,
gestureRecognizers: {
Factory<OneSequenceGestureRecognizer>(
() => EagerGestureRecognizer(),
),
},
onWebViewCreated: (WebViewController webViewController) async {
_webViewController = webViewController;
_controller.complete(webViewController);
},
onPageFinished: (_) {
_webViewController!.runJavascriptReturningResult(jsString);
},
javascriptMode: JavascriptMode.unrestricted,
initialUrl: Uri.dataFromString(
state.html,
mimeType: 'text/html',
encoding: Encoding.getByName('utf-8'),
).toString(),
),
);
}
if (state is CourseReadError) {
return Scaffold(
appBar: MyAppBar(height: 60.h, title: 'title'),
body: Center(child: Text(state.error)),
);
}
return const Scaffold(body: progressIndicator);
},
);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.