-
-
Save jack24254029/f5ef80ec6a0573bef70d7de9e94af7eb to your computer and use it in GitHub Desktop.
dio adapter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:dio/dio.dart'; | |
import 'package:flutter_bili_app/http/core/hi_adapter.dart'; | |
import 'package:flutter_bili_app/http/core/hi_error.dart'; | |
import 'package:flutter_bili_app/http/request/base_request.dart'; | |
/// Dio 適配器 | |
class DioAdapter extends HiNetAdapter { | |
@override | |
Future<HiNetResponse<T>> send<T>(BaseRequest request) async { | |
var response, options = Options(headers: request.header); | |
var error; | |
try { | |
if (request.httpMethod() == HttpMethod.GET) { | |
response = await Dio().get(request.url(), options: options); | |
} else if (request.httpMethod() == HttpMethod.POST) { | |
response = await Dio().post(request.url(), | |
data: request.queryParameters, options: options); | |
} else if (request.httpMethod() == HttpMethod.DELETE) { | |
response = await Dio().post(request.url(), | |
data: request.queryParameters, options: options); | |
} | |
} on DioError catch (e) { | |
error = e; | |
response = e.response; | |
} | |
if (error != null) { | |
throw HiNetError( | |
code: response?.statusCode ?? -1, | |
message: error.toString(), | |
data: buildResponse(response, request), | |
); | |
} | |
return buildResponse(response, request); | |
} | |
/// 構建 HiNetResponse | |
HiNetResponse buildResponse(Response response, BaseRequest request) { | |
return HiNetResponse( | |
data: response.data, | |
request: request, | |
statusCode: response.statusCode, | |
statusMessage: response.statusMessage, | |
extra: response, | |
); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter_bili_app/http/core/dio_adapter.dart'; | |
import 'package:flutter_bili_app/http/core/hi_adapter.dart'; | |
import 'package:flutter_bili_app/http/core/hi_error.dart'; | |
import 'package:flutter_bili_app/http/request/base_request.dart'; | |
import 'package:flutter_bili_app/utils/logger.dart'; | |
class HiNet { | |
HiNet._(); | |
static HiNet _instance; | |
static HiNet getInstance() { | |
if (_instance == null) { | |
_instance = HiNet._(); | |
} | |
return _instance; | |
} | |
Future fire(BaseRequest request) async { | |
HiNetResponse response; | |
var error; | |
try { | |
response = await _send(request); | |
} on HiNetError catch (e) { | |
error = e; | |
response = e.data; | |
_printLog(e.message); | |
} catch (e) { | |
// 其他異常 | |
error = e; | |
_printLog(e); | |
} | |
if (response == null) { | |
_printLog(error); | |
} | |
var result = response.data; | |
_printLog(result); | |
final statusCode = response.statusCode; | |
switch (statusCode) { | |
case 200: | |
return result; | |
case 401: | |
throw NeedLoginError(); | |
case 403: | |
throw NeedAuthError( | |
result.toString(), | |
data: result, | |
); | |
default: | |
throw HiNetError( | |
code: statusCode, | |
message: result.toString(), | |
data: result, | |
); | |
} | |
} | |
Future<dynamic> _send<T>(BaseRequest request) async { | |
_printLog('url: ${request.url()}'); | |
// 使用 mock 發送請求數據 | |
//HiNetAdapter adapter = MockAdapter(); | |
// 使用 dio 發送請求 | |
HiNetAdapter adapter = DioAdapter(); | |
return adapter.send(request); | |
} | |
void _printLog(dynamic message) { | |
Logger.printLog(message, tag: 'hi_net'); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment