Flutter(3):Http 请求库 - dio

dio 是一个强大的 HTTP 网络请求库,支持全局配置、Restful API、FormData、拦截器、 请求取消、Cookie 管理、文件上传/下载、超时、自定义适配器、转换器等。

导入 dio

import 'package:dio/dio.dart';

// 配置网络请求的基础选项
BaseOptions options = BaseOptions(
  baseUrl: "http://example.com/api",
  connectTimeout: 5000,					// 连接超时时间
  receiveTimeout: 3000,					// 接收超时时间
  contentType: 'application/json',		// 请求体的内容类型
  responseType: 'ResponseType.json',	// 期望的响应数据类型
  headers: {}, 							// 请求头
);
Dio dio = Dio(options);

GET 请求

Response response;
// 方法一
response = await dio.get('/test?id=12&name=dio');

// 方法二
response = await dio.get('/test', queryParameters: {'id': 12, 'name': 'dio'});

POST 请求

response = await dio.post('/test', data: {'id': 12, 'name': 'dio'});

// 响应数据
if (response.statusCode == 200){		// Http状态码
	print(response.data);				// 响应数据
}

FormData

FormData formData = FormData.fromMap({
  'id': 12,
  'name': 'dio',
})

response = await dio.post('/test', data: formData);

如果发送的数据是 FormData,则 dio 会将请求的 contentType 设为 multipart/form-data。

拦截器
在 Dio 中,你可以通过自定义拦截器来对请求和响应进行处理。拦截器允许你在发送请求之前(onRequest)、收到响应之后(onResponse)、发生异常时(onError)进行额外的操作,例如根据响应状态码进行错误处理。

// 添加拦截器
dio.interceptors.add(
  InterceptorsWrapper(
    onRequest: (RequestOptions options, RequestInterceptorHandler handler){
	  options.data = {...options.data, 'sign': 'test'};		// 请求前在data参数中增加sign数据
      handler.next(options);
	},
	onResponse:(Response response, ResponseInterceptorHandler handler){
	  if (response.statusCode == 200) {
        handler.next(response);		// 继续操作
      } else {
		handler.reject(DioError(	// 返回报错信息
          error: "请求失败,状态码:${response.statusCode}",
          response: response,
        ));
	  }
	},
	onError: (DioException err, ErrorInterceptorHandler handler){
	  // ...
	}
  )
)

try {
  response = await dio.get("http://example.com/api/data");
  print(response.data);
} catch (error) {
  print("Error: $error");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值