inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Flutter 중급 3편 - 의존성 주입 가이드

네트워크 통신 에러 처리

해결된 질문

331

김보겸

작성한 질문수 8

0

안녕하세요. 수강 잘 하고 있습니다.

dio package를 사용하여 네트워크 처리를 하고 있는데 에러 처리관련해서 어디 부분에서 하는 것이 좋을 지 고민하다가 질문 올립니다.

현재는 viewmodel -> usecases -> usecase -> repository -> remoteDataSource -> dio 이렇게 의존성을 받고 있고, remoteDatasource 에서 필요한 데이터만 List<StudentModel> 이런식으로 뷰모델까지 보내고 있습니다. 그러나 네트워크 에러가 발생했을 때는 remoteDataSource에서 List<StudentModel> 이 아닌 실패했을 떄 모델을 전송하게 되는데 (ErrorModel) 그렇게 되면 뷰모델까지 타입이 동적으로 전해지기때문에 이게 맞나 생각이 들기도 합니다.

혹은 dio 부분에서 400 500 에러 일때 alert 를 띄울까 생각을 했지만 그렇게 되면 context를 dio 까지 끌고 가야되고 전역으로 관리해야 되서 맞지 않다고 생각했습니다. 실제로는 어떻게 처리하는 것이 현명할지 질문드립니다. 감사합니다.

flutter mvvm provider 클린-아키텍처 dependency

답변 1

0

오준석

원하시는 해답은 중급 1편 - 클린아키텍처의 이미지 검색 앱에서 이미 다루었는데요.

Result 클래스를 만들어서 활용하시면 됩니다.

freezed 를 사용한 코드로 예시를 들면 다음과 비슷한 형태로 하시면 되겠습니다.

@freezed
sealed class Result<T> with _$Result<T> {
  const factory Result.success(T data) = Success;
  const factory Result.error(ErrorModel errorModel) = Error;
}

소스코드 참고: https://github.com/junsuk5/flutter-clean-architecture-course/blob/master/image-search-app/lib/data/data_source/result.dart

요즘은 freezed 보다 dart 공식 문법을 활용하는 것을 추천하오니 관련 내용 유튜브에 올린 영상을 참고하시기 바랍니다. https://youtu.be/Cl9FcNNbiu8?si=I6teJPb0K8WOG5-4

 

또한, dio 의 에러 처리의 경우에 alert 을 띄우려는 경우에도, 역시 중급 1편의 이미지 검색 앱에서 네트워크 에러 처리를 했던 것 처럼 UI 까지 이벤트를 Stream을 통해 끌고 올라와서 UI 에서 alert 을 띄우는 것을 추천합니다. Context 를 UI 보다 아래로 내려보내는 것은 대표적인 안티패턴이니까요.

이해가 안 되는 부분이 있다면 또 질문 주시기 바랍니다.

1

김보겸

제가 필요했던 답변입니다. 감사합니다!!

198강 (){onTap(e);}의 이해 돕기

0

39

1

Node 관련 질문입니다

0

38

3

구글 소셜 로그인 후 로그인 시 구글에러

0

33

2

실습중(개인 비용 관리 앱) 문의드려요

0

46

2

6강에 비디오가 이상해요

0

28

2

Isar 마지막 업데이트는 2년전입니다.

0

34

0

수강연장부탁드려도될까요..

0

43

2

Chat GPT API 설정하기 프롬프트

0

49

2

FlutterSecureStorage 질문

0

33

0

구글 플레이 등록 시, Privact Policy URL 등록 팁

0

46

1

질문있습니다!

0

20

0

2-8강 Websocket server running on port가 안 뜹니다.

0

44

2

마스크 json url이 안보여서 공유합니다

0

69

1

DI 에 대해 문의 좀 드립니다.

0

115

2

Bad state 에러

0

190

1

여러 화면 di강의는 언제 나올 예정인가요?

0

187

1

Riverpod 프로바이더에 의존성 주입

0

956

1

remote data source impl

0

271

1

go router 의존성

0

284

1

객체가 아닌 일반 변수의 get it

0

282

1

뷰 모델 분리하기

0

335

1

데이터 추상화 문제

0

327

2

로그인(auth)관련 데이터 흐름

0

262

1

소스코드 공유

0

432

1