# ecp_net **Repository Path**: kitman/ecp_net ## Basic Information - **Project Name**: ecp_net - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-25 - **Last Updated**: 2026-10-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ecp_net ecp_net是基于[Dio](https://pub.flutter-io.cn/packages/dio)库的二次封装库,提供了更丰富的**错误处理/数据转换/状态回调** /** State内自动取消**等功能,使用前请先熟悉[Dio](https://pub.flutter-io.cn/packages/dio)库。 > **注意**:该库为内部项目需求设计,API 可能随业务调整而变化,通用场景请自行评估兼容性。问题反馈请通过仓库主页提交。 ## 功能列表 - 全局错误处理 - 全局数据解析 - 请求状态监听 - State生命周期绑定 - 网络加载框(LoadingDialog)自动加载 ## 使用方式 ### 添加依赖 ```yaml dependencies: ecp_net: ^0.0.10 ``` ### 初始化SmartDialog > 因为库使用了[SmartDialog](https://pub.flutter-io.cn/packages/flutter_smart_dialog)库LoadingDialog和Toast,故在需要在MyApp中初始化SmartDialog ``` class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); // This widget is the root of your application. @override Widget build(BuildContext context) { return ScreenUtilInit(builder: () { return MaterialApp( ... builder: FlutterSmartDialog.init(), ); }); } } ``` ### 初始化NetConfig(可选) > NetConfig 可选择不初始化,默认使用无配置(BaseOptions)的Dio ``` var convert = NetConvert( codeKeys: ["errCode"], messageKeys: ['errMsg'], successFlags: ['200']); var options = BaseOptions( baseUrl: "http://135.0.123.36:9000", connectTimeout: 10*1000, receiveTimeout: 10*1000, sendTimeout: 10*1000); NetConfig.instance ..convert = convert //可选:全局数据转换适配器,默认NetConvert ..baseOptions = options; //可选:Dio基础Options ``` 以下均为可选配置,建议在程序入口进行设置;具体配置如下表: |参数 | 功能 | 默认 | |--- | --- | -- | | baseOptions | Dio基础Options | Dio库默认值 | | convert | 全局数据转换适配器 |NetConvert | | errorHandler | 全局错误处理器 | NetErrorHandler | | dynamicHeader | 动态添加请求头方法 | 无 | | initialDio | 配置Dio回调方法,例如添加拦截器,静态公用请求头等 | 无 | | loadingDialog | DialogRequest加载弹窗 | SmartDialog自带的LoadingDialog | | loadingMsg | 自带LoadingDialog提示信息 | 加载中 | ### 极简示例 ``` get("/sso/captcha") //生成Future .transformObj((value) => Test.fromJson(value)) //数据转换成Test类型实例 .toDialogRequest() //转换成DialogRequest,带默认LoadingDialog .onSuccess((value) => LogUtil.e("$value")) //数据返回回调,value不为空 .await(); //开始调用 ``` ## 功能说明 ### 请求别名 > 别名名称参考Dio库的RESTful风格别名,且已封装成为顶级函数形式,在任意Dart文件内皆能调用,具体参数请参照Dio库 ``` get("/sso/captcha"); getUri("/sso/captcha"); post("/sso/captcha"); postUri("/sso/captcha"); put("/sso/captcha"); putUri("/sso/captcha"); ... ``` 若要使用Dio中**download**方法,则需要使用原生Dio方式,例: ``` netDio.download(urlPath, savePath); //netDio是Dio单例别名,Dart文件内皆可调用 ``` ### State生命周期绑定 - State混入**NetStateMixin **(with NetStateMixin) - toXXXRequest 传入state ``` /// 混入NetStateMixin class _MyHomePageState extends State with NetStateMixin { ... testCaptcha() { get("/sso/captcha", options: Options(responseType: ResponseType.bytes)) .transformObj((value) => value as Uint8List) .toRequest(state: this) //传入state .await(); } } ``` ## 依赖 - [Dio](https://pub.flutter-io.cn/packages/dio) - [async](https://pub.flutter-io.cn/packages/async) - [connectivity](https://pub.flutter-io.cn/packages/connectivity) - [SmartDialog](https://pub.flutter-io.cn/packages/flutter_smart_dialog)