总体的思路,
- 借助Dio,将其封装为一个工具类(dio_utils.dart)
- 封装请求服务(service_api.dart)
- 根据请求参数封装 请求model (RequireModel )
- 根据返回数据类型封装返回Entitiy(list_entity.dart。因为返回的data中是一个list,如果是一个string,直接在entiy中解析好,上层进行调用即可)
- data中的单个对象进行封装(PersionEntity),方便解析
- 使用
总的来说封装了这么多就是为了后期使用方便。
1、dio_utils.dart
import 'dart:async';
import 'package:dio/dio.dart';
import 'err_code.dart';
import 'method.dart';
class DioNetUtils {
static final DioNetUtils _singleton = DioNetUtils._init();
static Dio _dio;
static const String text_type = "application/json; charset=utf-8";
static const String from_type = "application/x-www-form-urlencoded";
/// 是否是debug模式.
static bool _isDebug = true;
/// 打开debug模式.
static void openDebug() {
_isDebug = true;
}
DioNetUtils._init() {
BaseOptions options = new BaseOptions(
baseUrl: "https://www.baidu.com",
connectTimeout: 1000 * 10,
receiveTimeout: 1000 * 10,
headers: {},
//表示期望以那种格式(方式)接受响应数据。
// 接受4种类型 `json`, `stream`, `plain`, `bytes`. 默认值是 `json`,
responseType: ResponseType.json,
);
_dio = Dio(options);
//添加拦截器
_dio.interceptors.add(InterceptorsWrapper(
onRequest: (RequestOptions options) {
print("\n================== 请求数据 ==========================");
print("url = ${options.uri.toString()}");
print("headers = ${options.headers}");
print("params = ${options.data}");
},
onResponse: (Response response) {
print("\n================== 响应数据 ==========================");
print("code &