Flutter Chen Common
🌟 简介
本库为Flutter应用开发提供一站式解决方案,包含:
- 可定制的主题系统
- 完整的国际化支持
- 企业级网络请求封装
- 企业级日志体系封装
- N+高质量常用组件
- 常用开发工具及扩展集合
- 刷新列表一整套解决方案
- 开箱即用的通用各类弹窗
- 全局统一各状态布局
特性
- 🎨 主题系统 :通过
ThemeExtension
全局配置颜色/圆角/间距等样式 - 🌍 国际化支持:内置中英文,支持自定义文本和动态语言切换
- ⚡ 优先级覆盖:支持全局配置 + 组件级参数覆盖
- 📱 自适应设计:完美适配 iOS/Material 设计规范
- 🔥 企业级方案:内置日志/网络/安全等通用模块,提供开箱即用的复杂场景解决方案
🚀 快速接入
安装依赖
在 pubspec.yaml
中添加依赖:
yaml
/// 1.8.0版本已移除图片选择裁剪上传oss一站式解决方案
dependencies:
flutter_chen_common: 最新版本
🌐 网络请求
dart
// 网络模块初始化
// HttpConfig,内置日志打印、网络重试拦截器、token无感刷新以及相关操作
HttpClient.init(
config: HttpConfig(
baseUrl: 'https://api.example.com',
connectTimeout: const Duration(seconds: 30),
receiveTimeout: const Duration(seconds: 30),
sendTimeout: const Duration(seconds: 30),
commonHeaders: {"platform": Platform.isIOS ? 'ios' : 'android'},
interceptors: [CustomInterceptor()]
enableLog: true,
enableToken: true,
maxRetries: 3,
getToken: () => "token",
onRefreshToken: () async {
return "new_token";
},
onRefreshTokenFailed: () async {
Log.d("重新登录");
},
),
);
// 网络请求使用
HttpClient.instance.request(
"/xxxx",
method: HttpType.post.name,
fromJson: (json) => User.fromJson(json),
showLoading: true, // 自动显示全局Loading
)
// 网络请求方法参数
Future request<T>(
String path, {
String? baseUrl, // 不为空情况下用局部baseUrl,为空情况下用全局baseUrl
String? method,
Options? options,
dynamic data,
T Function(dynamic json)? fromJson,
bool showLoading = false,
CancelToken? cancelToken,
void Function(int, int)? onSendProgress,
void Function(int, int)? onReceiveProgress,
})
// 网络请求方法枚举
enum HttpMethod { get, post, put, delete, patch }
🔥 核心特性解析
三层拦截器体系
拦截器 | 功能描述 | 技术亮点 |
---|---|---|
Token管理 | 身份认证全流程处理 | 无感刷新+请求队列管理 |
结构化日志 | 全链路请求监控 | 完整上下文信息+性能分析 |
智能重试 | 网络异常自动重试 | 指数退避策略+条件过滤 |
Token刷新流程图解
rust
sequenceDiagram
participant App
participant Interceptor
participant AuthServer
participant BusinessServer
App->>BusinessServer: 请求订单数据
BusinessServer-->>Interceptor: 返回401
Interceptor->>AuthServer: 发起Token刷新
AuthServer-->>Interceptor: 返回新Token
Interceptor->>BusinessServer: 携带新Token重试
BusinessServer-->>App: 返回订单数据
自定义拦截器
scss
HttpConfig(
interceptors: [
CustomInterceptor1(),
CustomInterceptor2(),
],
)
企业级日志系统
css
// 打印样式如下(日志打印完全不会被截断,json格式化方便复制查看数据,在开启日志拦截以及记录日志时会将日志写入文件
┌─────────────────────────────────────────────────────────────────────────────
│ ✅ [HTTP] 2025-04-05 23:30:29 Request sent [Duration] 88ms
│ Request: 200 GET http://www.weather.com.cn/data/sk/101010100.html?xxxx=xxxx
│ Headers: {"token":"xxxxx","content-type":"application/json"}
│ Query: {"xxxx":"xxxx"}
│ Response: {"weatherinfo":{"city":"北京","cityid":"101010100","WD":"东南风"}}
└──────────────────────────────────────────────────────────────────────────────
日志系统几大优势:
- 全生命周期追踪:记录从发起到响应的完整过程
- 输出完整性:日志输出打印不会被截断、无论响应数据有多少都确保输出信息完整
- 可视化输出格式:JSON格式化复制即用,固定分块显示,即使网络请求并发再多也可很清楚的查看日志信息
- 性能分析:精确到毫秒级的耗时统计