前言
在项目中,我们往往要对第三方框架进行二次封装,目的在于减小项目对第三方框架的依赖,当第三方框架出现不兼容或者严重bug以至于我们需要更换第三方框架时,我们只需要在封装的地方更改第三方框架,而不需要在整个项目中进行更改。
下面我们封装对dio进行简单的二次封装
代码
import 'dart:ffi';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
typedef onSuccess(dynamic data);
typedef onError(String reason, int statusCode);
typedef onComplete();
class Http {
// 项目的baseurl
static const BASE_URL = "";
factory Http() => _getInstance();
static Http get instance => _getInstance();
static Http _instance;
Dio _dio;
Http._internal() {
// 可以在自己按需要配置
_dio = Dio(BaseOptions(
baseUrl: BASE_URL,
));
}
static Http _getInstance() {
if (_instance == null) {
_instance = new Http._internal();
}
return _instance;
}
void get(String path,
{Map<String, dynamic> param,
onSuccess success,
onError error,
onComplete complete}) {
_dio.get(path, queryParameters: param).then((value) {
if (value.statusCode == 200) {
if (success != null) {
success(value.data);
}
} else {
if (error != null) {
error(value.statusMessage, value.statusCode);
}
}
if (complete != null) {
complete();
}
});
}
void post(String path,
{data,
Map<String, dynamic> param,
onSuccess success,
onError error,
onComplete complete}) {
_dio.post(path, data: data, queryParameters: param).then((value) {
if (value.statusCode == 200) {
if (success != null) {
success(value.data);
}
} else {
if (error != null) {
error(value.statusMessage, value.statusCode);
}
}
if (complete != null) {
complete();
}
});
}
}
这里我们使用单例模式进行封装,在项目中的使用我们个调用Http.instance.get或者Http.instance.post。