프로젝트 #3에서 사용된 AuthenticationRepository를 살펴보며 Flutter 앱에서 서버와 통신을 어떻게 구현할 수 있는지 알아봅시다.
아래의 예시 코드를 통해 이해할 수 있습니다:
dynamic response = await _authenticationRepository.passGet(MyEnv.ipRiot,
'/tft/summoner/v1/summoners/by-name/$encodedSummonerName?api_key=${MyEnv.riotKey}');
위 코드처럼 AuthenticationRepository는 passGet 및 passPost 메서드를 제공하여 서버와의 HTTP GET 및 POST 요청을 수행합니다.
repository/authentication_repository.dart
class AuthenticationRepository {
Future<dynamic> passGet(
String myAuthority,
String unencodedPath,
) async {
Uri url = Uri.parse('https://$myAuthority$unencodedPath');
debugPrint(url.toString());
try {
http.Response response = await http.get(url, headers: {
'Content-Type': 'application/json',
"Accept": "application/json",
});
return jsonDecode(utf8.decode(response.bodyBytes));
} catch (e) {
debugPrint(']-----] e : ${e.toString()} [-----[');
}
}
Future<dynamic> passPost(
String myAuthority, String unencodedPath, Object body) async {
Uri url = Uri.parse('https://$myAuthority$unencodedPath');
try {
debugPrint("$url $body PassPost Url Body");
http.Response response = await http.post(
url,
headers: {
'Content-Type': 'application/json',
"Accept": "application/json",
// 'Content-Length': '<calculated when request is sent>',
// 'Host': '<calculated when request is sent>'
},
body: utf8.encode(jsonEncode(body)),
);
return jsonDecode(utf8.decode(response.bodyBytes));
} catch (e) {
// _controller.add(AuthenticationStatus.unauthenticated);
debugPrint(']-----] e passPost : ${e.toString()} [-----[');
}
}
}
이런식으로 세팅했습니다 관련 로직을 하나씩 보자면
1.passGet 메서드:
2.passPost 메서드:
이렇게 구현된 AuthenticationRepository는 Flutter 앱에서 간편하게 서버 통신을 관리할 수 있도록 도와줍니다.
이런식으로 이때까지 적었던 코드를 중간에 한번 정리해야겠다 생각해서 적어봤습니다. 이제 프로젝트를 다시 진행하로 가야겠네요 다음에는 새로운 내용으로 다시오겠습니다~