Last active
August 4, 2021 02:48
-
-
Save nick45chen/6884137c9464848ac429ab5a449bcfcf 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