webview_flutter: ^4.0.7
如何设置gestureNavigationEnabled。
版本4以前:WebView.gestureNavigationEnabled
版本4以后:WebKitWebViewController.setAllowsBackForwardNavigationGestures
按文档呢意思我需要写两个控制器?有没有什么办法在WebViewController上设置呢。
late WebViewController webViewController;
late WebKitWebViewController webKitWebViewController;
initController(){
late final PlatformWebViewControllerCreationParams params;
if (WebViewPlatform.instance is WebKitWebViewPlatform) {
params = WebKitWebViewControllerCreationParams(
allowsInlineMediaPlayback: true,
mediaTypesRequiringUserAction: const <PlaybackMediaTypes>{},
);
} else {
params = const PlatformWebViewControllerCreationParams();
}
//WebKitWebViewController 控制器
webKitWebViewController=WebKitWebViewController(params);
//setAllowsBackForwardNavigationGestures这个怎么设置到webViewController上
webKitWebViewController.setAllowsBackForwardNavigationGestures(true);
webViewController = WebViewController.fromPlatformCreationParams(params);
webViewController.setJavaScriptMode(JavaScriptMode.unrestricted);
webViewController.loadRequest(Uri.parse(resultUrl));
}
解决
final webViewPlatform = webViewController.platform;
if (webViewPlatform is WebKitWebViewController) {
webViewPlatform.setAllowsBackForwardNavigationGestures(true);
}
该回答引用ChatGPT
在版本4以后,WebView.gestureNavigationEnabled被移除,而是使用了新的setAllowsBackForwardNavigationGestures
方法来开启或关闭返回和前进手势。
在你的代码中,你应该使用webViewController
对象而不是webKitWebViewController
对象进行设置。可以尝试如下代码:
late WebViewController webViewController;
initController() {
webViewController = // 初始化webViewController
if (webViewController is WebKitWebViewController) {
// 当webViewController是WebKitWebViewController时,强转类型并设置返回和前进手势
(webViewController as WebKitWebViewController).setAllowsBackForwardNavigationGestures(true);
}
// 加载页面
webViewController.loadRequest(Uri.parse(resultUrl));
}
此外,你需要确保使用的WebView的实现是WebKit格式的,否则无法使用setAllowsBackForwardNavigationGestures
方法。
回答引用ChatGPT:使用了新的WebView类型WebViewX。WebViewX包括一个WebViewXController类,用于控制WebViewX的行为,包括是否允许手势导航。
要设置WebViewX的手势导航,您可以使用WebViewXController的setGestureNavigationEnabled方法,例如:
import 'package:webview_flutter/webview_flutter.dart';
late WebViewXController webviewController;
void initController() {
webviewController = WebViewXController(
gestureNavigationEnabled: true,
);
}
然后,在创建WebViewX时,将该WebViewXController传递给构造函数,例如:
WebViewX(
initialUrl: 'https://www.example.com',
controller: webviewController,
)
这将创建一个具有启用手势导航的WebViewX。您还可以使用webviewController对象的其他方法和属性来控制WebViewX的行为。
flutter--webview_flutter的使用
可以借鉴下
https://blog.csdn.net/qq_35168861/article/details/120763477
基于最新版ChatGPT4的回答,望采纳!!!有其他问题也可以询问我哦💕(最新版更智能,功能更加强大):
在webview_flutter 4.0.7版本中,您可以使用WebView.platform属性来设置平台特定的WebViewController并实现手势导航。以下是一个示例:
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
class MyWebView extends StatefulWidget {
final String initialUrl;
const MyWebView({Key? key, required this.initialUrl}) : super(key: key);
@override
_MyWebViewState createState() => _MyWebViewState();
}
class _MyWebViewState extends State<MyWebView> {
late WebViewController webViewController;
bool gestureNavigationEnabled = true;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('WebView'),
),
body: WebView(
initialUrl: widget.initialUrl,
onWebViewCreated: (controller) {
webViewController = controller;
if (WebView.platform == SurfaceAndroidWebView()) {
// For Android, create a WebChromeClient to enable gesture navigation
controller.android?.setWebChromeClient(
WebChromeClient(),
);
}
},
gestureNavigationEnabled: gestureNavigationEnabled,
),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
gestureNavigationEnabled = !gestureNavigationEnabled;
if (WebView.platform == SurfaceAndroidWebView()) {
// For Android, set allowsBackForwardNavigationGestures to control gesture navigation
webViewController.android?.webView
?.settings
.setSupportsMultipleWindows(gestureNavigationEnabled);
}
});
},
child: Icon(
gestureNavigationEnabled ? Icons.gesture : Icons.gesture_outlined,
),
),
);
}
}
在这个示例中,我们通过设置WebView.platform属性来获取平台相关的WebViewController。对于Android,我们创建了一个WebChromeClient对象并将其设置给WebViewController以启用手势导航。在FAB的回调函数中,我们切换gestureNavigationEnabled标志,并使用webViewController.android?.webView.settings.setSupportsMultipleWindows(gestureNavigationEnabled)方法来控制手势导航。