86 lines
2.7 KiB
Dart
86 lines
2.7 KiB
Dart
import 'package:bot_toast/bot_toast.dart';
|
||
import 'package:dio/dio.dart';
|
||
import 'package:flutter/material.dart';
|
||
import 'package:peach/config/_.dart';
|
||
import 'package:peach/utils/_.dart';
|
||
import 'package:toast/toast.dart';
|
||
|
||
class ResponseData {
|
||
String code;
|
||
String message;
|
||
dynamic data;
|
||
}
|
||
|
||
/// 单例模式封装 dio
|
||
class HttpApi {
|
||
Dio _Dio;
|
||
static HttpApi _instance = HttpApi.instance();
|
||
factory HttpApi() => _instance;
|
||
|
||
HttpApi.instance() {
|
||
SPreferences.init();
|
||
if (null == _Dio) {
|
||
BaseOptions options = new BaseOptions(
|
||
baseUrl: Config.ApiUrl['PhotoBaseUrl'],
|
||
connectTimeout: 30000,
|
||
contentType: 'application/json; charset=utf-8',
|
||
responseType: ResponseType.json,
|
||
);
|
||
|
||
_Dio = new Dio(options);
|
||
_Dio.interceptors.add(InterceptorsWrapper(onRequest: (RequestOptions options) {
|
||
// print(SPreferences().getString("token"));
|
||
// options.headers
|
||
options.headers.putIfAbsent("token", () => SPreferences().getString("token"));
|
||
// 请求拦截器
|
||
return options;
|
||
}, onResponse: (Response response) {
|
||
|
||
// 因为 downloadFile 下载apk方法被响应拦截器拦截了,所以这里需要对下载的
|
||
// 响应头进行判断,如果是阿里云,则不进行状态码的判断
|
||
if (response.headers.value("server") == "AliyunOSS") {
|
||
return response;
|
||
} else {
|
||
switch (response.data["code"]) {
|
||
case 404:
|
||
// BotToast.showText(text: response.data["message"]);
|
||
return response;
|
||
case 100:
|
||
return response;
|
||
case 500:
|
||
BotToast.showText(text: response.data["message"]);
|
||
throw response.data["message"];
|
||
default:
|
||
return response;
|
||
}
|
||
}
|
||
}, onError: (DioError e) {
|
||
print("网络请求出现错误 ====== ${e.message}");
|
||
// 错误拦截器
|
||
return e;
|
||
}));
|
||
}
|
||
}
|
||
|
||
/// GET 请求
|
||
Future get({@required String url, Options options, dynamic params}) async {
|
||
Response res =
|
||
await _Dio.get(url, queryParameters: params, options: options);
|
||
return res.data;
|
||
}
|
||
|
||
/// POST 请求
|
||
Future post({@required String url, Options options, dynamic params}) async {
|
||
Response res = await _Dio.post(url, data: params, options: options);
|
||
return res.data;
|
||
}
|
||
|
||
/// 下载文件
|
||
Future downloadFile(String urlPath, String savePath, {ProgressCallback onReceiveProgress}) async {
|
||
Response response = await _Dio.download(urlPath, savePath,
|
||
onReceiveProgress: onReceiveProgress,
|
||
options: Options(sendTimeout: 25000, receiveTimeout: 25000));
|
||
return response;
|
||
}
|
||
}
|