# flutter_dio_2 **Repository Path**: power9508/flutter_dio_2 ## Basic Information - **Project Name**: flutter_dio_2 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-06 - **Last Updated**: 2025-11-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于Dio 5.9的最佳实践封装 ## 📦 封装架构 ### 1. **ApiClient(核心封装类)** - 单例模式设计,确保全局只有一个Dio实例 - 统一的响应处理机制(`ApiResponse`) - 完善的错误处理和类型转换 - 支持自定义头信息、基础URL更新 ### 2. **BaseApiService(基础服务类)** - 为具体业务服务提供统一基类 - 封装了通用CRUD方法 - 提供响应数据转换工具方法 ### 3. **UserService(业务服务示例)** - 完全重写,使用新的封装架构 - 统一的响应格式:`ApiResponse` - 增加了搜索功能 - 更好的错误处理和状态码管理 ## 🔧 主要特性 ### **拦截器系统** - **日志拦截器**:开发环境下的详细请求/响应日志 - **重试拦截器**:自动重试失败请求(支持配置重试次数和延迟) - **请求拦截器**:添加认证token、时间戳等 ### **错误处理** - 针对不同DioException类型提供详细错误信息 - HTTP状态码分类处理(400、401、403、500等) - 网络超时、连接错误等特殊处理 ### **配置优化** - 合理的时间out设置(连接15s,接收15s,发送10s) - 状态码验证(<500视为有效响应) - 生产环境自动禁用调试日志 ## 🚀 使用方法 ```dart // 使用UserService final userService = UserService(); // 获取用户列表 final response = await userService.getUsers(); if (response.success) { final users = response.data!; // 处理数据 } else { // 处理错误 print('错误: ${response.message}'); } // 直接使用ApiClient final apiClient = ApiClient(); final result = await apiClient.get('/users'); ``` 这个封装遵循了Dio 5.9的最佳实践,提供了企业级的网络请求解决方案,具有高可维护性和扩展性。