dio 新版请求库的封装,基于最新版,需要先请求token后再继续其他请求操作,修改http可直接使用
import 'dart:async'
import 'dart:convert'
import 'package:dio/dio.dart'
import 'package:shared_preferences/shared_preferences.dart'
class Request {
static Future request<T>(String path,
{String method, Map params, data}) async {
Response response
var dio = Dio()
var tokenDio = Dio()
dio.options.baseUrl = "https://www.xxxx.net/api/v1"
dio.options.connectTimeout = 50000
dio.options.receiveTimeout = 3000
// dio.options.contentType = "application/x-www-form-urlencoded"
dio.options.headers["Authorization"] = 'xxxx'
dio.options.responseType = ResponseType.plain
tokenDio.options = dio.options
try {
dio.interceptors.add(
InterceptorsWrapper(onRequest: (options, handler) async {
print(options.method)
print(params)
print(path)
SharedPreferences prefs = await SharedPreferences.getInstance()
var token = prefs.getString("token")
if (token == null) {
dio.lock()
print('无token,开始请求匿名')
tokenDio.post('/user/anonymous').then((d) {
var t = json.decode(d.data)['token']
prefs.setString('token', t)
options.headers['token'] = t
handler.next(options)
}).catchError((error, stackTrace) {
handler.reject(error, true)
}).whenComplete(() => dio.unlock())
} else {
print(token)
options.headers['Authorization'] = token
handler.next(options)
}
}, onResponse: (response, handler) {
handler.resolve(response)
}, onError: (DioError e, handler) {
print(e)
handler.reject(e)
}),
)
if (method == 'get') {
response = await dio.get(path, queryParameters: params)
} else {
response = await dio.post(path, data: data)
}
if (response.statusCode == 200) {
if (json.decode(response.data)['code'] == 0 ||
json.decode(response.data)['code'] == 10004) {
print('获取数据成功!')
print(response.data)
return json.decode(response.data)
} else {
print(response.data)
}
} else {
throw Exception('后端接口出现异常,请检测代码和服务器情况.........')
}
} catch (e) {
print('ERROR:======> ${e}')
}
}
}
调用
import 'package:xxx/request/request.dart';
class NewsApi {
static Future getInformationGroup() {
return Request.request('/information_group', method: 'get');
}
static Future getRecommend(params) {
return Request.request('/index/recommend', method: 'get', params: params);
}
}