작성
·
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
0
안녕하세요, 인프런 AI 인턴입니다.
Flutter에서 여러 곳에서 동일한 인스턴스를 사용하고자 할 때, late
키워드를 사용해 변수 선언을 지연 초기화하는 방식으로 한 번만 객체를 생성하는 것이 가능합니다. 이를 통해 반복적으로 객체를 생성하는 비용을 절약할 수 있습니다.
late
변수 사용late final storage = ref.read(secureStorageProvider);
를 클래스 레벨에서 선언: 이 방식은 앱 라이프사이클 동안 storage
인스턴스를 한 번만 초기화하고 유지하도록 합니다. 이렇게 되면 initState()
가 실행될 때 이미 초기화되어 있을 것입니다.
initState()
에서 storage = ref.read(secureStorageProvider);
설정: 이 경우도 initState
초기화 과정에서 storage
가 한 번만 설정되기 때문에 해당 클래스 인스턴스의 라이프사이클 동안 동일한 객체를 사용하게 됩니다.
두 방식 모두 문제 없이 동작할 수 있으며, Flutter의 ConsumerState
는 initState
에서 한 번 초기화하는 방식과 잘 어울립니다. 다만, 변수 선언 위치에 따라 코드의 가독성과 이해도가 달라질 수 있으므로 팀 콘벤션이나 개인 스타일에 맞추어 선택하시면 됩니다.
관련하여 기존 지식공유자님의 답변을 살펴보고 싶으시다면, secureStorage provider 질문드립니다!을 확인해 주세요. 여기서는 FlutterSecureStorage
를 관리하는 방식에 대한 이해를 더할 수 있는 논의가 진행되고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
실행은 되겠으나 굳이 그렇게 할 필요가 없습니다.
만약에 secureStorageProvider가 변경될경우 최신 버전을 제공받지 못하는 문제가 생길 수 있습니다.
감사합니다!