강의

멘토링

로드맵

Inflearn brand logo image

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

anwjr41님의 프로필 이미지
anwjr41

작성한 질문수

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

Dio에 Provider 적용하기

_SplashScreenState에서 storage를 late로 호출해서 한번만 불러와도 되나요?

작성

·

44

·

수정됨

0

강의에서는

final storage = ref.read(secureStorageProvider);

이 코드를 checkToken과 deleteToken에서 불러 사용하고 있는데 여러번 부르는 것이 싫다면

class _SplashScreenState extends ConsumerState<SplashScreen> {
late final storage = ref.read(secureStorageProvider);

  @override
  void initState() {
    super.initState();
    //토큰 검사
    checkToken();
    // deleteToken();
  }

또는

class _SplashScreenState extends ConsumerState<SplashScreen> {
  late final FlutterSecureStorage storage;
  @override
  void initState() {
    super.initState();
    storage = ref.read(secureStorageProvider);
    //토큰 검사
    checkToken();
    // deleteToken();
  }

으로 한번만 불러서 storage를 바로 사용해도 될까요? 이렇게 사용해도 버그나 라이프사이클에 문제가 있을지 궁금합니다.

강의 잘 듣고 있습니다!! 감사합니다.

답변 2

0

anwjr41님의 프로필 이미지
anwjr41
질문자

가능하다라는 것으로 이해하겠습니다!
다른 지식적인 부분이 있으시다면 달아주시면 감사하겠습니다!!

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

실행은 되겠으나 굳이 그렇게 할 필요가 없습니다.

만약에 secureStorageProvider가 변경될경우 최신 버전을 제공받지 못하는 문제가 생길 수 있습니다.

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다.

Flutter에서 여러 곳에서 동일한 인스턴스를 사용하고자 할 때, late 키워드를 사용해 변수 선언을 지연 초기화하는 방식으로 한 번만 객체를 생성하는 것이 가능합니다. 이를 통해 반복적으로 객체를 생성하는 비용을 절약할 수 있습니다.

late 변수 사용

  • late final storage = ref.read(secureStorageProvider);를 클래스 레벨에서 선언: 이 방식은 앱 라이프사이클 동안 storage 인스턴스를 한 번만 초기화하고 유지하도록 합니다. 이렇게 되면 initState()가 실행될 때 이미 초기화되어 있을 것입니다.

  • initState()에서 storage = ref.read(secureStorageProvider); 설정: 이 경우도 initState 초기화 과정에서 storage가 한 번만 설정되기 때문에 해당 클래스 인스턴스의 라이프사이클 동안 동일한 객체를 사용하게 됩니다.

두 방식 모두 문제 없이 동작할 수 있으며, Flutter의 ConsumerStateinitState에서 한 번 초기화하는 방식과 잘 어울립니다. 다만, 변수 선언 위치에 따라 코드의 가독성과 이해도가 달라질 수 있으므로 팀 콘벤션이나 개인 스타일에 맞추어 선택하시면 됩니다.

관련하여 기존 지식공유자님의 답변을 살펴보고 싶으시다면, secureStorage provider 질문드립니다!을 확인해 주세요. 여기서는 FlutterSecureStorage를 관리하는 방식에 대한 이해를 더할 수 있는 논의가 진행되고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

anwjr41님의 프로필 이미지
anwjr41

작성한 질문수

질문하기