You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Android端InAppWebView点击返回键返回网页上一页实现

解决方案

要拦截Android返回键并让WebView返回上一页,你可以用Flutter的WillPopScope组件结合InAppWebView的控制器实现,具体步骤如下:

1. 初始化WebViewController

在你的State类中声明控制器变量,并在InAppWebView的onWebViewCreated回调中完成初始化:

late InAppWebViewController _webViewController;

2. 用WillPopScope包裹InAppWebView

在build方法里,将InAppWebView嵌套在WillPopScope内部,通过onWillPop回调拦截返回键事件:

@override
Widget build(BuildContext context) {
  return WillPopScope(
    onWillPop: () async {
      // 先检查WebView是否有可返回的历史记录
      if (await _webViewController.hasBackHistory()) {
        // 调用goBack回到上一页
        _webViewController.goBack();
        // 返回false,阻止系统默认的关闭应用行为
        return false;
      } else {
        // 没有历史记录时,返回true允许关闭应用
        return true;
      }
    },
    child: Scaffold(
      body: InAppWebView(
        initialUrlRequest: URLRequest(url: Uri.parse("你的目标网页地址")),
        onWebViewCreated: (controller) {
          _webViewController = controller;
        },
      ),
    ),
  );
}

关键说明

  • WillPopScope是Flutter专门用于处理Android返回键的组件,onWillPop返回Future<bool>:返回false表示拦截返回事件,不执行系统默认操作;返回true则允许执行默认的关闭行为。
  • 必须先通过hasBackHistory()判断WebView是否存在上一页,避免无历史记录时调用goBack()无效。
  • iOS侧滑返回手势不受该逻辑影响,依然可以正常使用。

内容的提问来源于stack exchange,提问作者Pedro Rabbi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 03:35:14