其实dio已经很好用了,无非就是封装成单例,然后添加几个拦截器
上代码
import 'package:dio/dio.dart';
import 'package:cserp/token_interceptor.dart';
import 'package:cserp/err_interceptor.dart';
import 'package:cserp/result/login_result.dart';
final BaseOptions _baseOption = BaseOptions(
connectTimeout: Duration(seconds: 3),
baseUrl: "http://192.168.50.13/erp/",
contentType: "application/json; charset=utf-8");
final dio = Dio(_baseOption);
//登录专用dio
final lgoinDio = Dio(_baseOption);
dioInit() {
//给我常用的请求添加上登录拦截器,未登录就跳转登录
dio.interceptors
..add(TokenInterceptor())//这是我添加的登录拦截器
..add(ErrInterceptor());//这是错误拦截器
//给登录请求只添加错误拦截器来处理错误
lgoinDio.interceptors.add(ErrInterceptor());
}
//我只用到了post,所以只封装了post,其他可以根据自己需求封装
//需要注意,返回值一定要是Fluture,不能是void,也不能是Fluture<void>
Future<Response> post(String url, {String? data, Function? success}) async {
Response response =
await dio.request(url, data: data, options: Options(method: "POST"));
if (success != null) {
success();
}
return response;
}
//提交登录信息的专用请求,因为这个请求不需要别的验证,只需要弹出错误信息就好
Future<Response?> loginReq(String username, String password,
{Function(LoginResult)? success}) async {
Response response = await lgoinDio
.post("/user/login", data: {"username": username, "password": password});
LoginResult lr = LoginResult.fromJson(response.data);
if (success != null) {
success(lr);
}
return response;
}
没什么复杂了,也没必要搞复杂,这就已经够用了