인프런 커뮤니티 질문&답변

유하님의 프로필 이미지
유하

작성한 질문수

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

Restaurant Pagination 요청해보기

인터셉터 질문입니다

작성

·

101

0

1)

인터센터 구현하실 때 storage를 주입해서 사용했고

final FlutterSecureStorage storage;

다른 스플래쉬 스크린에서는 const로

common > const > data.dart

final storage = FlutterSecureStorage(); 에 있는 storage를 가져다 쓰고 있습니다.

stateless, stateful widget도 결국 class가 청사진 이라고 생각되는데

모두 storage;를 주입 받아야 하지 않나요? 궁금합니다..!

 

2)인터셉터에서

선생님께서 onRequest 에

return super.onRequest(options, handler); 부분이 핸들러가 에러를 발생시킬지 , 정상처럼 진행시킬지 알아서 결정한다고 하셔서

그럼 혹시 여기서도 return handler.reject와 return handler.resolve를 쓸 수 있나요??

 

3) 인터셉터에서 onError에

if(/auth/token 경로도 아니고 && 401일때){

...

}

그외에는 return handler.reject(err)를 사용했는데

사실 그대로 에러를 내는 거면

return super.onError(err,handler); 를 써도 되지 않나요?

답변 1

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

1) Provider를 사용하고 있으니 주입받은 것 뿐입니다. 만약에 UI에서도 provider를 사용하고싶다면 주입 하셔도 괜찮습니다. 코드의 일관성의 문제에 가깝고 사실상 기능상은 차이가 없습니다. FlutterSecureStorage가 한번 생성되면 변경될 일이 없기 때문입니다.

2) 하셔도 괜찮습니다. 실제 내부적으로 맨 마지막에는 handler.reject 또는 handler.resolve를 실행하고 있을걸로 생각됩니다.

3) 마찬가지입니다. "써도 되지 않나요?"라는 질문이 혹시 완전 같은거라고 생각하신다면 그렇지 않습니다. handler.resolver, handler.reject는 handler의 함수를 실행한겁니다. super.onError를 실행한다면 부모 클래스의 onError 정의를 그대로 다시 한번 실행 해주게됩니다. 그렇기 때문에 둘은 완전히 다릅니다. handler.reject는 명시적으로 에러를 터트리게되고 super.onError를 실행하면 부모의 onError 함수에 정의된 로직을 다시한번 실행합니다. 2번에서 handler.resolve 대신 super.onRequest를 실행한 이유도 마찬가지입니다. 제가 생각하는 onRequest의 로직이 존재하지만 해당 로직을 실행시킨다해서 원래 정의돼있던 onRequest 로직을 통째로 버리면 Dio 내부적으로 기본으로 정의 돼있는 요청 처리 로직을 잃게됩니다. 3번의 경우 확실한 에러가 났을때 부모 로직을 통해서 한번 더 확인할 필요가 따로 없기 때문에 명시적으로 reject 한것입니다. 실행과 뉘앙스 둘 다 모두 큰 차이가 있습니다.

감사합니다!

유하님의 프로필 이미지
유하

작성한 질문수

질문하기