webview_flutter设置gestureNavigationEnabled

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)方法来控制手势导航。