달달한 스토리

728x90
반응형

 

지금 회사에서 플러터를 거의 마무리하면서,

 

내가 토이 프로젝트를 하지 않는 이상 이제

 

플러터와는 살짝 멀어지면서,

 

네이티브에 더 집중할 것으로 예상이 된다.

 

오늘은 이전 글이었던,

 

2021.10.04 - [Programing/Android Studio With Kotlin] - flutter/dart /JSON과 직렬화 api 서버통신 자동으로 만들기 / retrofit, dio, retrofit_generator, build_runner, json_serializable /TIL # 64

 

flutter/dart /JSON과 직렬화 api 서버통신 자동으로 만들기 / retrofit, dio, retrofit_generator, build_runner, json_

오늘은 api 서버통신에 대한 글을 작성하려 한다. 참고 자료는 코딩 팩토리님의 영상과 아래 공식 문서를 참고했다. https://flutter-ko.dev/docs/development/data-and-backend/json JSON과 직렬화 어느 시점부..

daldalhanstory.tistory.com

Json 직렬화를 하고 api 서버통신을 도와주었던,

 

retrofit2 패키지에 대해 이야기하고자 한다.

 

기존에 http 통신을 사용하면, response.body를 통해서

 

statusCode가 200인지 400인지 500인지 등등 알 수 있었다.

 

그렇다면 retrofit2는 어떻게 알 수 있을까?

 

우리나라에서 지금 시각을 기준으로 retrofit에 대한 많은 자료가 없어

 

정보를 얻기 까다로웠지만, 다행히 알아내었다.

 

retrofit과 같이 사용되는 dio패키지를 이용하면 된다.

 

 


해결법

 @RestApi(baseUrl: 'api 베이스주소')
abstract class UserGetGenerator {

  factory UserGetGenerator(Dio dio, {String baseUrl}) = _UserGetGenerator;
  
  @Headers(<String, String>{'Content-Type': 'application/json'})
  @GET('api 주소')
  Future duplicateEmail(@Query('email') String email);
 
}

 

 

class UserGet {
  late UserGetGenerator client;

  Dio dio = Dio();

  UserGet() {
    client = UserGetGenerator(dio);
  }

Future<bool?> duplicateEmail({
    required String email,
  }) async {
    print('email : => $email');
    try {
      dynamic result = await client.duplicateEmail(email);
      print('result ==> ${result['exist']}');
      return result['exist'];
    } on DioError catch (e) {
      print('에러 로그33 : ${e.response?.statusCode}');
      return null;
    }
  }
}

우선 UserGetGenerator를 build_runner패키지를 이용해

 

자동 완성을 해주었고,

 

다음과 같이 UserGet 클래스를 싱글톤으로 만들어

 

UserGetGenerator에 인스턴스를 한 번만 호출하여,

 

client 변수에 넣어주고,

 

이곳에서 api에서 받아온 데이터에 가공을 하여 반환할 수 있게 만들었다.

 

중요한 것은 

 

반응형

 

 try {
      dynamic result = await client.duplicateEmail(email);
      print('result ==> ${result['exist']}');
      return result['exist'];
    } on DioError catch (e) {
      print('에러 로그33 : ${e.response?.statusCode}');
      return null;
    }

이 부분이다.

 

client.duplicateEmail() 메서드를 통해,

 

서버에서 맵을 반환받고,

 

그 맵에서 exist키에 해당하는 불값을 반환하는 것이다.

 

여기까지에 과정을 try에 넣어주고,

 

아래에는 on DioError catch (e) {}를 넣어준다.

 

그렇다면 예외상황이 발생할 때, 서버에서 받아온 statusCode를 알 수 있게 된다.

 

e(DioErrorType).reponse?.statusCode

 

이런 식으로 말이다.

 

 

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading