ecp_net是基于Dio库的二次封装库,提供了更丰富的错误处理/数据转换/状态回调 /** State内自动取消**等功能,使用前请先熟悉Dio库。
注意:该库为内部项目需求设计,API 可能随业务调整而变化,通用场景请自行评估兼容性。问题反馈请通过仓库主页提交。
功能列表
- 全局错误处理
- 全局数据解析
- 请求状态监听
- State生命周期绑定
- 网络加载框(LoadingDialog)自动加载
使用方式
添加依赖
dependencies:
ecp_net: ^0.0.9
初始化SmartDialog
因为库使用了SmartDialog库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<MyHomePage> with NetStateMixin {
...
testCaptcha() {
get("/sso/captcha", options: Options(responseType: ResponseType.bytes))
.transformObj((value) => value as Uint8List)
.toRequest(state: this) //传入state
.await();
}
}