Flutter
Flutter API 통신을 간편하게 해주는 dio 라이브러리
해니01_15
2024. 9. 20. 09:33
API 통신을 하다보면 동일한 주소로 method만 바꿔서 통신하는 게 보통이다.
이럴떄 보면 조금더 간편하게 할 수 없을까? 생각이 들때 사용하면 좋을 라이브러리이다.
물론 사용하지 않고 구현해도 문제는 없다.
[pub.dev]
dio | Dart package
A powerful HTTP networking package, supports Interceptors, Aborting and canceling a request, Custom adapters, Transformers, etc.
pub.dev
examples 에 보면 다양한 사용법이 설명 되어 있다.
아래는 그걸 활용하여 만든 코드이다.
[구현 예시]
1. API 통신에 필요한 값들을 모아 요청 함수를 만든다.
Future<String> requestApi(String message) {
final Map<String, String> params = {
'api_key': 'API키',
'query': message
};
return httpCall(
baseURL,
method: "POST", // get, put, delete, patch 등등 변형 가능
data: params,
);
}
2. httpCall 이라고 실질적으로 통신하는 구간을 만든다.
안의 예시는 내가 통신을하면서 필요한 것들을 만들어 놓은 것으로 응답 값과 원하느 요청 값이 다르게 되면 개인에 맞춰 바꿔야한다!
Future<String> httpCall(String url, {
String method = 'GET',
Map<String, dynamic>? data,
}) async {
if (url.isEmpty) {
return '';
}
//dio객체 생성
var dio = Dio();
Response? response;
try {
switch (method) {
case 'GET':
{
response = await dio.get(url, queryParameters: data);
break;
}
case 'POST':
{
response = await dio.post(url, data: data);
break;
}
case 'PUT':
{
response = await dio.put(url, data: data);
break;
}
case 'DELETE':
{
response = await dio.delete(url, data: data);
break;
}
case 'PATCH':
{
response = await dio.patch(url, data: data);
break;
}
}
if (response != null) {
//이 부분은 각자의 응답에 맞춰서 변형
String? responseData = response.data;
responseData ??= '';
final result = {
'requestUrl': url,
'statusCode': response.statusCode ?? 0,
'statusMessage': response.statusMessage ?? '',
'data': responseData,
};
final jsonResult = jsonEncode(result);
return jsonResult;
}
} catch (e) {
print(e);
}
}
다음에는 Dio의 cancelToken 에 대하여 알아보쟈 ...