【问题标题】:Flutter (webview_flutter) Swipe Back to Pop WebviewFlutter (webview_flutter) 滑动返回 Pop Webview
【发布时间】:2022-01-21 03:14:51
【问题描述】:

我将以下代码用于 Flutter Webview(webview_flutter 包)。

当点击返回按钮时,_goBack() 设置是否返回上一页,如果没有上一页,则弹出webview。

然后我启用了gestureNavigationEnabled:true 以允许用户滑回之前的页面。效果很好。但是,当没有以前的页面时,滑动不会弹出 webview。

有没有办法让滑动返回与返回按钮相同的行为?

  1. 如果存在上一页,则滑动到上一页
  2. 如果没有上一页,滑动关闭网页视图

谢谢。

import 'package:webview_flutter/webview_flutter.dart';

     body: WillPopScope(
      onWillPop: () => _goBack(context),
      child: WebView(  
        initialUrl: widget.url,
        gestureNavigationEnabled: true,
        onWebViewCreated: (WebViewController webViewController) {
          _controllerCompleter.future.then((value) => _controller = value);
          _controllerCompleter.complete(webViewController);
      ),
    ),

      Future<bool> _goBack(BuildContext context) async {
        if (await _controller.canGoBack()) {
          _controller.goBack();
          return Future.value(false);
        } else {
          Navigator.of(context).pop();
          return Future.value(true);
        }
      }

【问题讨论】:

标签: flutter flutterwebviewplugin


【解决方案1】:

问题是“上下文”,当它没有找到上下文时它没有关闭 webview 窗口。所以在这种情况下你需要做的是:

看这里: https://github.com/brianegan/flutter_redux/issues/5#issuecomment-361215074

You can set a global key for your navigation:

    final GlobalKey<NavigatorState> navigatorKey = new GlobalKey<NavigatorState>();

Pass it to MaterialApp:

    new MaterialApp(
          title: 'MyApp',
          onGenerateRoute: generateRoute,
          navigatorKey: navigatorKey,
        );

Push routes:

    navigatorKey.currentState.pushNamed('/someRoute');

您需要为导航创建一个全局键,然后它才能工作。它会在不获取上下文的情况下关闭窗口(意味着如果上一页不存在,那么它也可以弹出窗口)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2020-09-04
    • 2021-06-06
    • 2021-10-20
    • 1970-01-01
    • 2018-08-16
    相关资源
    最近更新 更多