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

dhong115 y님의 프로필 이미지
dhong115 y

작성한 질문수

[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

PageController 사용해보기

flutter dispose 관련

작성

·

1.3K

·

수정됨

0

안녕하세요

액자 프로젝트에서

dispose 함수로 Stateful 위젯 삭제할 때, if 문 안쓰고

46번 코드만 적어도 되나요?

제가 생각했을 땐, 어차피 init 함수 실행되면서 timer 무조건 실행되니까 timer 가 null 이 안되고,

또, 느낌표로 null 아니라고 인증마크?도 했으니

if 문으로 체크해야되나? 라는 의문이 들어서요^^

답변 2

0

timer 질문을 하니 스스로 답이 찾아졌습니다. 질문의 힘이 큰 것 같습니다. 늘 꼼꼼한 답변 감사드립니다.

0

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

안녕하세요!

중간에 timer가 절대로 null 로 변경되는 로직이 없을거라고 확신한다면 정황상 그렇게 작성 할 수도 있습니다.

하지만 프로그래밍은 나 혼자 하는게 아니기때문에 항상 예외에 주의를 하는게 좋습니다.

감사합니다.

안녕하세요, 혹시 dispose()는 언제 작동 되나요? 앱을 백그라운드로 실행했을 때, 앱을 닫았을 때 모두 프린트해서 찍어봤는데 찍혀지지는 않습니다. 그리고 timer란 특정 시간을 설정 후 특정한 실행문을 돌릴 때 작동되는 값같은데 설정하지 않으면 null로 표시됩니다. 그럼

if(timer == null){ timer!.cancel(); }

로 하는 것이 당연할 것 같은데 이 부분은 이해가 되지 않고 강의에서도 설명하지 않은 부분입니다. 좀 설명 부탁드려도 될까요?

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

안녕하세요! 생명주기 강의 차트에서 dispose() 함수 및 모든 생명주기가 언제 실행되는지 알려드리고있습니다. dispose()는 State가 완전 삭제될때 실행됩니다. 백그라운드로 보낼때는 위젯이 화면에서 (플러터 런타임기준) 사라지는게 아니기때문에 실행되지 않습니다. 앱을 종료할때도 현재 플러터 프레임워크는 dispose가 실행되지 않는걸로 보입니다. 이 부분은 상식적으로 실행돼야하는 것 같은데 아직 플러터측에서 큰 이슈로 생각하지 않는 것 같네요. 링크 첨부해드립니다. https://github.com/flutter/flutter/issues/28879

이외의 설명은 라이프사이클 강의에서 봐보시면 쉽게 이해하실 수 있을 것 같습니다.

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

말씀하신 코드는 if(timer == null)의 경우 timer가 null일 경우에 timer를 캔슬하라는 코드이니 로직이 잘못되었습니다. timer가 null 이면 취소할 타이머가 존재하지 않습니다.

dhong115 y님의 프로필 이미지
dhong115 y

작성한 질문수

질문하기