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

Flutter WebView返回按钮异常:点击直接退出应用求解决方案

解决Flutter WebView点击返回按钮直接退出的问题

你的代码没有处理WebView的导航历史,也没拦截系统返回按钮的事件,所以点击返回会直接退出应用。以下是适配最新Flutter版本的修复代码:

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

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter WebView',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const MyHomePage(title: 'WebView Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late WebViewController _webViewController;

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () async {
        // 检查WebView是否可以后退
        if (await _webViewController.canGoBack()) {
          _webViewController.goBack();
          return false; // 阻止默认的返回退出行为
        } else {
          return true; // 没有历史记录时,允许退出应用
        }
      },
      child: Scaffold(
        body: WebView(
          initialUrl: 'https://flutter.dev',
          onWebViewCreated: (controller) {
            _webViewController = controller;
          },
          javascriptMode: JavascriptMode.unrestricted, // 可选,根据网页需求开启JS支持
        ),
      ),
    );
  }
}

关键修改说明:

  • WebViewController实例:保存WebView的控制器,用来查询导航历史和执行后退操作
  • WillPopScope组件:拦截系统返回按钮的点击事件,自定义处理逻辑
  • onWillPop回调:先通过canGoBack()判断WebView是否有可后退的页面,有则调用goBack()执行网页后退,返回false阻止默认退出;没有历史记录时返回true,允许退出应用

内容的提问来源于stack exchange,提问作者swapnil mane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:18:19