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

Flutter WebView导航失败时如何实现页面自动重载?

onWebResourceError 可支撑该需求的验证说明

官方webview_flutter插件提供的onWebResourceError回调会在主页面/子资源加载失败、网络异常、服务端返回4xx/5xx错误等所有资源加载异常场景触发,完全覆盖「无法访问目标URL」的判断需求。

具体实现方案
  • 第一步:绑定回调时增加主页面校验,避免页面内嵌的图片、JS等非核心子资源加载失败误触发重载,仅主框架(isForMainFrame为true)加载失败时执行重载逻辑
  • 第二步:增加防抖与重载次数限制,避免短时间内重复触发重载,同时防止目标URL永久失效时出现无限重载的问题,参考代码如下:
int _reloadCount = 0;
final int _maxReloadTimes = 3;
final WebViewController controller = WebViewController()
  ..setJavaScriptMode(JavaScriptMode.unrestricted)
  ..onWebResourceError = (error) {
    // 仅主页面加载异常且未超过最大重载次数时触发重载
    if (error.isForMainFrame == true && _reloadCount < _maxReloadTimes) {
      _reloadCount++;
      // 间隔2秒后执行重载,避免网络还未恢复就重复请求
      Future.delayed(const Duration(seconds: 2), () {
        controller.reload();
      });
    } else if (_reloadCount >= _maxReloadTimes) {
      // 超过重载次数可自行新增用户提示逻辑
      debugPrint("页面加载失败,请检查网络后重试");
    }
  }
  ..onPageFinished = (url) {
    // 页面加载成功后重置重载次数
    _reloadCount = 0;
  }
  ..loadRequest(Uri.parse("你的目标URL"));
  • 第三步:边缘场景补全,如需覆盖网络超时导致的加载失败,可在触发loadRequest时启动超时定时器,10~15秒内未收到onPageFinished回调则主动触发一次重载,进一步提升覆盖范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:54:05