inflearn logo
강의

Khóa học

Chia sẻ kiến thức

[Nhà máy mã] [Trung cấp] Hoạt động rung chuyển! Các kỹ năng cần thiết để trở thành tiền vệ như quản lý trạng thái, quản lý bộ đệm, tạo mã, GoRouter và logic xác thực!

Đăng ký nhà cung cấp cho Dio

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

81

anwjr41

5 câu hỏi đã được viết

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를 바로 사용해도 될까요? 이렇게 사용해도 버그나 라이프사이클에 문제가 있을지 궁금합니다.

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

flutter 하이브리드-앱

Câu trả lời 2

0

anwjr41

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

0

codefactory

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

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

감사합니다!

0

communityai8509

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

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

late 변수 사용

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

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

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

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

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

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

0

25

0

FlutterSecureStorage 질문

0

25

0

Dio onError Interceptor 만드는 부분에 질문이 있습니다.

0

74

2

관리자 기능에 대한 질문

0

96

2

part 'restaurant_model.g.dart';

0

91

1

36강. dio 인터셉터에 storage를 전달하는 코드가 이해 안되는데요. 도움 부탁드립니다.

0

54

2

2번 반환 상황 관련 질문

0

58

2

riverpod 3.0

0

139

2

Asset folder??

0

79

2

디자이너와 협업 시 프레임 크기 설정 관련 질문

0

111

2

FutureProvider, StateNotifierProvider 선택 기준

0

68

2

컴포넌트 모델화

0

61

2

쿼리 파라미터

0

81

2

화면 안보임

0

64

2

PaginationListView

0

50

1

강의중 37.Dio onErrorInterceptor 작업하기 dio 관련 질문입니다.

0

99

2

프로토타입이미지

0

59

2

여러 객체를 상태 관리하는 방법에 대한 질문

0

82

2

장바구니 결제하기 응답이 500이 옵니다.

0

102

2

removeFromBasket에서 await patchBasket()을 마지막에 하면 에러나는거 아닌가요?

0

64

2

이 두가지는 완전히 동일한 기능인가요?

0

104

3

내부 코드를 작성하지 않은 CursorPaginationLoading가 어떻게 로딩상태를 갖는지 잘 모르겠습니다...

0

75

2

코딩 작성 순서 관련 질문

0

83

2

ProductCard factory 관련 문제 질문

0

47

2