flutter 网络请求
时间: 2023-07-29 17:10:04 浏览: 167
Flutter网络请求dio封装是一种常用的网络请求框架,它可以帮助我们快速地进行网络请求,同时也可以提高我们的开发效率。在使用dio进行网络请求时,我们可以通过封装来简化代码,提高代码的可读性和可维护性。常见的封装方式有:
1. 封装请求方法:将网络请求的方法封装成一个函数,可以传入参数,方便调用。例如:
```
Future<Response> post(String url, Map<String, dynamic> data) async {
try {
Response response = await Dio().post(url, data: data);
return response;
} catch (e) {
throw e;
}
}
```
2. 封装请求拦截器:可以在请求前或请求后进行一些操作,例如添加请求头、打印请求日志等。例如:
```
class HttpUtil {
static Dio dio = Dio();
static Future<Response> get(String url, {Map<String, dynamic> params}) async {
dio.interceptors.add(InterceptorsWrapper(
onRequest: (options, handler) {
// 添加请求头
options.headers['Authorization'] = 'Bearer token';
return handler.next(options);
},
onResponse: (response, handler) {
// 打印请求日志
print('response: ${response.data}');
return handler.next(response);
},
));
try {
Response response = await dio.get(url, queryParameters: params);
return response;
} catch (e) {
throw e;
}
}
}
```
3. 封装错误处理:可以统一处理网络请求的错误,例如网络异常、请求超时等。例如:
```
class HttpUtil {
static Dio dio = Dio();
static Future<Response> get(String url, {Map<String, dynamic> params}) async {
try {
Response response = await dio.get(url, queryParameters: params);
return response;
} on DioError catch (e) {
if (e.type == DioErrorType.CONNECT_TIMEOUT) {
throw '请求超时';
} else if (e.type == DioErrorType.RECEIVE_TIMEOUT) {
throw '响应超时';
} else if (e.type == DioErrorType.RESPONSE) {
throw '请求异常,状态码:${e.response.statusCode}';
} else if (e.type == DioErrorType.CANCEL) {
throw '请求取消';
} else {
throw '网络异常';
}
}
}
}
```
通过封装,我们可以让代码更加简洁、易读、易维护,同时也可以提高开发效率。
阅读全文