네트워크 통신 에러 처리
안녕하세요. 수강 잘 하고 있습니다.
dio package를 사용하여 네트워크 처리를 하고 있는데 에러 처리관련해서 어디 부분에서 하는 것이 좋을 지 고민하다가 질문 올립니다.
현재는 viewmodel -> usecases -> usecase -> repository -> remoteDataSource -> dio 이렇게 의존성을 받고 있고, remoteDatasource 에서 필요한 데이터만 List<StudentModel> 이런식으로 뷰모델까지 보내고 있습니다. 그러나 네트워크 에러가 발생했을 때는 remoteDataSource에서 List<StudentModel> 이 아닌 실패했을 떄 모델을 전송하게 되는데 (ErrorModel) 그렇게 되면 뷰모델까지 타입이 동적으로 전해지기때문에 이게 맞나 생각이 들기도 합니다.
혹은 dio 부분에서 400 500 에러 일때 alert 를 띄울까 생각을 했지만 그렇게 되면 context를 dio 까지 끌고 가야되고 전역으로 관리해야 되서 맞지 않다고 생각했습니다. 실제로는 어떻게 처리하는 것이 현명할지 질문드립니다. 감사합니다.
回答 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;
}요즘은 freezed 보다 dart 공식 문법을 활용하는 것을 추천하오니 관련 내용 유튜브에 올린 영상을 참고하시기 바랍니다. https://youtu.be/Cl9FcNNbiu8?si=I6teJPb0K8WOG5-4
또한, dio 의 에러 처리의 경우에 alert 을 띄우려는 경우에도, 역시 중급 1편의 이미지 검색 앱에서 네트워크 에러 처리를 했던 것 처럼 UI 까지 이벤트를 Stream을 통해 끌고 올라와서 UI 에서 alert 을 띄우는 것을 추천합니다. Context 를 UI 보다 아래로 내려보내는 것은 대표적인 안티패턴이니까요.
이해가 안 되는 부분이 있다면 또 질문 주시기 바랍니다.
198강 (){onTap(e);}의 이해 돕기
0
29
1
Node 관련 질문입니다
0
30
3
구글 소셜 로그인 후 로그인 시 구글에러
0
26
2
실습중(개인 비용 관리 앱) 문의드려요
0
43
2
6강에 비디오가 이상해요
0
27
2
Isar 마지막 업데이트는 2년전입니다.
0
30
0
수강연장부탁드려도될까요..
0
42
2
Chat GPT API 설정하기 프롬프트
0
46
2
FlutterSecureStorage 질문
0
31
0
구글 플레이 등록 시, Privact Policy URL 등록 팁
0
41
1
질문있습니다!
0
19
0
2-8강 Websocket server running on port가 안 뜹니다.
0
42
2
마스크 json url이 안보여서 공유합니다
0
66
1
DI 에 대해 문의 좀 드립니다.
0
114
2
Bad state 에러
0
188
1
여러 화면 di강의는 언제 나올 예정인가요?
0
187
1
Riverpod 프로바이더에 의존성 주입
0
955
1
remote data source impl
0
271
1
go router 의존성
0
282
1
객체가 아닌 일반 변수의 get it
0
282
1
뷰 모델 분리하기
0
334
1
데이터 추상화 문제
0
326
2
로그인(auth)관련 데이터 흐름
0
261
1
소스코드 공유
0
432
1

