美文网首页
Flutter-dio网络请求封装

Flutter-dio网络请求封装

作者: WinJayQ | 来源:发表于2020-05-02 21:34 被阅读0次

dio是一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等...

使用dio三方库必然也需要先在pubspec中依赖它:

dio:^3.0.1

1.简单使用

代码演练:

import'package:dio/dio.dart';

void dioNetwork() async {
  // 1.创建Dio请求对象
  final dio = Dio();

  // 2.发送网络请求
  final response = await dio.get("http://123.207.32.32:8000/api/v1/recommend");

  // 3.打印请求结果
  if (response.statusCode == HttpStatus.ok) {
    print(response.data);
  } else {
    print("请求失败:${response.statusCode}");
  }
}

2.dio库的封装

http_config.dart

class HTTPConfig {
  static const baseURL = "https://httpbin.org";
  static const timeout = 5000;
}

http_request.dart

import 'package:dio/dio.dart';

import 'http_config.dart';

class HttpRequest{

  static BaseOptions baseOptons = BaseOptions(baseUrl:HTTPConfig.baseURL,connectTimeout: HTTPConfig.timeout);
  static Dio dio = Dio(baseOptons);


  static Future<T> request<T>(String url,{String method="get",Map<String,dynamic>params,Interceptor inter}) async {
    //1.请求的单独配置
    final options = Options(method: method);

    //2.添加第一个拦截器
    Interceptor dInter = InterceptorsWrapper(
      onRequest: (RequestOptions options){
        //1. 在进行任何网络请求的时候,可以添加一个loading显示


        //2.很多页面的访问必须要求携带Token,那么就可以在这里判断是否有Token


        //3.对参数进行一些处理,比如序列化处理等
        print("拦截了请求");
        return options;
      },
      onResponse: (Response response){
        print("拦截了响应");
        return response;
      },
      onError: (DioError error){
        print("拦截了错误");
        return error;
      }
    );

    List<Interceptor> inters = [dInter];
    if(inter != null){
      inters.add(inter);
    }
    dio.interceptors.addAll(inters);

    //3.发送网络请求
    try{
      Response response = await dio.request<T>(url,queryParameters: params,options: options);
      return response.data;
    }on DioError catch(e){
      return Future.error(e);
    }
  }
}

代码使用:

HttpRequest.request("https://httpbin.org/get", params: {"name": "why", 'age': 18}).then((res) {
  print(res);
});

HttpRequest.request("https://httpbin.org/post",
                    method: "post", params: {"name": "why", 'age': 18}).then((res) {
  print(res);
});

相关文章

网友评论

      本文标题:Flutter-dio网络请求封装

      本文链接:https://www.haomeiwen.com/subject/ayylghtx.html