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
相关产品推荐
相关产品推荐

