Flutter开箱即用一站式解决方案-企业级网络篇

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":"东南风"}}
└──────────────────────────────────────────────────────────────────────────────

日志系统几大优势:

  1. 全生命周期追踪:记录从发起到响应的完整过程
  2. 输出完整性:日志输出打印不会被截断、无论响应数据有多少都确保输出信息完整
  3. 可视化输出格式:JSON格式化复制即用,固定分块显示,即使网络请求并发再多也可很清楚的查看日志信息
  4. 性能分析:精确到毫秒级的耗时统计

pub地址flutter_chen_common

相关推荐
RichardLai888 小时前
[Flutter学习之Dart基础] - 控制语句
android·flutter
louisgeek11 小时前
Flutter Channel 通信机制
flutter
浅忆无痕15 小时前
Flutter空安全最小必备知识
android·前端·flutter
亚洲小炫风19 小时前
flutter 打包mac程序 dmg教程
flutter·macos
亚洲小炫风1 天前
flutter 桌面应用之系统托盘
flutter·系统托盘
亚洲小炫风1 天前
flutter 桌面应用之右键菜单
flutter·桌面端·右键菜单·contextmenu
louisgeek1 天前
Flutter Widget、Element 和 RenderObject 的区别
flutter
顾林海1 天前
Flutter 文本组件深度剖析:从基础到高级应用
android·前端·flutter
RichardLai882 天前
[Flutter学习之Dart基础] - Dart方法基础
flutter
RichardLai882 天前
[Flutter学习之Dart基础] - Dart 变量类型及声明
flutter