一、前言
网络请求是我们App开发过程中的重要内容,大部分App都需要和服务器进行数据交互,因此在开发过程中,我们需要封装我们网络请求的代码,对request、response以及error做统一处理,减少业务开发中的样板代码。
二、使用dio进行网络通讯
2.1 配置网络请求的基本信息
关于dio的具体用法参考dio官方文档。按照下面方式配置dio package:
dependencies:
dio: ^4.0.4
在网络请求中,我们通常需要配置服务器的地址以及超时等,这里我们新建一个http_config.dat文件,添加如下内容:
class HttpConfig {
//接口基础地址
static const baseUrl = 'https://httpbin.org';
static const connectTimeout = 5000;
static const receiveTimeout = 3000;
//基础配置
static final options = BaseOptions(
baseUrl: baseUrl,
connectTimeout: connectTimeout,
receiveTimeout: receiveTimeout);
}
其他具体业务中关于网络请求的通用配置信息都可以在这里进行添加,这里只是一个参考方式。
2.2 单例Dio对象
dio的作者也提示我们,尽量使用单例模式,我们可以按下面的方式定义单例:
class DioManager {
static final DioManager _instance = DioManager._internal();
factory DioManager() => _instance;
late Dio dio;
DioManager._internal(){
_initDio();
}
///
///
/// 完成DIO的基础配置
///
void _initDio() {
dio = Dio(HttpConfig.options);
dio.interceptors.add(HeaderInterceptor());
dio.interceptors.add(AccessTokenInterceptor());
dio.interceptors.add(LogInterceptor());
}
}
2.3 处理网络请求
处理网络请求可以单独定义一个Http_util.dart文件,内容封装网络常用的请求方法,比如get、post等。
这里参考以前Android官方的设计方法,定义一个model作为最终的返回对象,resource.dart
//业务code成功
const codeResponseS