如何将WillPopScope与WebViewWidget结合使用?我只找到了WebView的例子.使用WillPopScope,我需要的是,当按下Back按钮时,它返回到页面https://www.example.com,即Webview的主页.

这是我目前的代码:

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

void main() => runApp(MaterialApp(home: WebViewExample()));

class WebViewExample extends StatefulWidget {
  @override
  _WebViewExampleState createState() => _WebViewExampleState();
}

class _WebViewExampleState extends State<WebViewExample> {
  bool showErrorPage = false;

  WebViewController controller = WebViewController();

  @override
  void initState() {
    super.initState();

    controller.setNavigationDelegate(NavigationDelegate(
      onWebResourceError: (WebResourceError error) {
        setState(() {
          showErrorPage = true;
        });
      },
    ));

    controller.setJavaScriptMode(JavaScriptMode.unrestricted);

    controller.loadRequest(Uri.parse("https://www.example.com"));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: showErrorPage 
      ? const Center(
        child: Text('Error!'),
        style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold)),
      )
      : WebViewWidget (
        controller: controller,
      )
    );
  }
}

推荐答案

试试这条路

  @override
  Widget build(BuildContext context) {
    controller
      ..setJavaScriptMode(JavaScriptMode.unrestricted)
      ..loadRequest(Uri.parse('https://www.example.com/'));
    return Scaffold(
      body: showErrorPage 
      ? const Center(
        child: Text('Error!'),
        style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold)),
      )
      : WillPopScope(
        onWillPop: () => _goBack(context),
        child: WebViewWidget(
          controller: controller,
        ),
      ),
    );
  }

  Future<bool> _goBack(BuildContext context) async {
     controller.loadRequest(Uri.parse('https://www.example.com/'));
     return Future.value(false);
  }

Flutter相关问答推荐

来自另一个屏幕的数据

如何更改ElevatedButton的 colored颜色 以按下它?

如何更新文本字段的基础上的选定下拉菜单?

Flutter -如何停止块监听程序在后台堆栈中运行

Flutter OpenID Connect无效参数:redirect_uri using Keycloak

如何使排内 children 的身高与其他排内 children 的身高相适应?

如何创建这样的按钮

在Ffltter中,我已经使用了Ffltter_BLOC Cupit和Pusher,但当获得新数据时,UI没有更新

如何在flutter中使用youtube_explod_start加载下一页

Flutter 附近的连接

参数类型void Function()无法分配给参数类型void Function(LongPressEndDetails)?

如何使用 Material3 创建带有高度的完美白色提升按钮?

如何在 VS Code 中启用 Flutter 运行/调试工具栏?

如何在列表视图生成器中显示图像

断言失败:std::move(hal_2_1_verifier).Run(). 初始化,LE音频客户端至少需要Bluetooth音频HAL V2.1

如何防止键盘将内容向上推?

Flutter 错误:OutletListModel类型的值不能分配给List类型的变量?

Flutter/Riverpod 创建复杂对象的副本,其值在某处发生变化

你如何在 Flutter 中组合两个数组?

Flutter:font_awesome_icon pro 版报错?如何设置 font_awesome 克隆仓库的路径?