深色模式
Dio
介绍
网络请求库:dio。
一些细节
核心方法 request()
核心请求方法:request()
,
dart
response = await dio.request(
'/test',
data: {'id':12,'name':'xx'},
options: Options(method:'GET'),
);
以下请求方法都是request()
方法的别名:
dart
Future<Response> get(...)
Future<Response> post(...)
Future<Response> put(...)
Future<Response> head(...)
Future<Response> delete(...)
Future<Response> pacth(...)
Future<Response> download(...)
以下请求方法都是requestUri()
方法的别名,而requestUri()
是request()
的别名:
dart
Future<Response> getUri(...)
Future<Response> postUri(...)
Future<Response> putUri(...)
Future<Response> headUri(...)
Future<Response> deleteUri(...)
Future<Response> patchUri(...)
Future<Response> download(Uri...)
request()
方法会调用fetch()
方法,所以,fetch()
方法是所有请求的唯一出口。
源码:
dart
Future<Response<T>> request<T>(
String path, {
data,
Map<String, dynamic>? queryParameters,
CancelToken? cancelToken,
Options? options,
ProgressCallback? onSendProgress,
ProgressCallback? onReceiveProgress,
}) async {...}
Future<Response<T>> fetch<T>(RequestOptions requestOptions) async {...}
从源码可以看到,request()
和fetch()
都是异步方法。
只需要记住两点:
- 核心方法:
request()
- 唯一出口:
fetch()
拦截器
每个 Dio 实例都可以添加任意多个拦截器,他们组成一个队列,拦截器队列的执行顺序是FIFO。
另外有QueuedInterceptor
,添加此拦截器的所有请求,按串行执行。
发送表单
默认情况下,dio会尝试将data
中的内容转为json发送。
如果要将data
作为表单发送,可以在Header中指定contentType。
dart
// 统一配置
dio.options.contentType = Headers.formUrlEncodedContentType;
// 单个指定
dio.post(
'/info',
data: {'id': 5},
options: Options(contentType: Headers.formUrlEncodedContentType),
);