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

Flutter中如何通过Dio拦截器与connectivity包实现请求前网络检测

Flutter 请求前网络检查实现(Dio拦截器 + Connectivity包)

直接上落地方案,分步骤实现:

1. 安装依赖

先在pubspec.yaml中添加所需包:

dependencies:
  flutter:
    sdk: flutter
  dio: ^5.4.0  # 用最新稳定版即可
  connectivity_plus: ^5.0.1  # 官方推荐替代原connectivity包,支持更多平台

执行flutter pub get完成安装。

2. 封装网络状态检查工具

写个轻量工具类统一处理网络状态判断:

import 'package:connectivity_plus/connectivity_plus.dart';

class NetworkChecker {
  // 检查设备是否有可用网络连接
  static Future<bool> isConnected() async {
    final result = await Connectivity().checkConnectivity();
    // 只要不是无网络状态,就判定为有可用连接
    return result != ConnectivityResult.none;
  }
}

3. 编写Dio网络拦截器

自定义拦截器,在请求发起前触发网络检查:

import 'package:dio/dio.dart';
import 'network_checker.dart';

class PreRequestNetworkInterceptor extends InterceptorsWrapper {
  @override
  void onRequest(RequestOptions options, RequestInterceptorHandler handler) async {
    // 先执行网络检查
    final hasNetwork = await NetworkChecker.isConnected();
    if (!hasNetwork) {
      // 无网络时抛出错误,中断请求流程
      handler.reject(
        DioException(
          requestOptions: options,
          error: "当前无网络连接,请检查网络设置",
          type: DioExceptionType.cancel,
        ),
        true,
      );
    } else {
      // 有网络,放行请求
      handler.next(options);
    }
  }
}

4. 初始化Dio并挂载拦截器

创建Dio实例时,把拦截器添加进去,确保所有请求都经过检查:

import 'package:dio/dio.dart';

Dio buildDioClient() {
  final dio = Dio();
  // 添加网络检查拦截器
  dio.interceptors.add(PreRequestNetworkInterceptor());
  // 可按需添加其他拦截器(如日志、Token注入等)
  return dio;
}

5. 使用示例

发起请求时捕获无网络错误,做对应处理:

final dio = buildDioClient();

try {
  final response = await dio.get("https://api.example.com/data");
  // 处理正常响应逻辑
  print(response.data);
} on DioException catch (e) {
  if (e.error.toString().contains("当前无网络连接")) {
    // 提示用户无网络
    print(e.error);
  } else {
    // 处理其他请求错误
    print("请求失败:${e.message}");
  }
}

注意事项

  • connectivity_plus仅能判断设备是否连接到网络载体(如WiFi、移动数据),无法保证网络实际可访问(比如连了WiFi但没网)。如果需要更严格的可用性校验,可以在无网络判断后增加一个简单的ping请求(比如请求https://www.baidu.com),但会增加请求耗时,按需选择即可。
  • 拦截器中的错误提示可根据业务需求自定义,方便后续统一捕获处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:09:58