flutter dio 封装

其实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;
}

 

没什么复杂了,也没必要搞复杂,这就已经够用了

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注