[Flutter] Dialog에서 Navigator.of(context).pop()을 했는데 엉뚱한 화면이 pop되는 경우

메모하는 개발자·2021년 11월 11일
0

Flutter삽질방지

목록 보기
6/9

결론부터 말하자면

showDialog를 WidgetsBinding.instance!.addPostFrameCallback 으로 감싸줘야한다!

WidgetsBinding.instance!.addPostFrameCallback((_) async {
      await showDialog<bool>(
      ...
      )
});

이유를 살펴보면

build()중에 ShowDialog()메소드가 실행되면 플러터가 위젯트리에서 가장 가까운 Overlay를 찾게된다.
그 Overlay를 다이얼로그의 container로 사용하게된다.

initState()중에 showDialog()메소드가 실행됐을때는 아래 참고사이트를 보세요!

예시상황1)
화면이 로드되고 있는 중에 initState()에서 다이얼로그 띄우고싶을때

예시상황2)
Navigator로 화면 이동후 새로운 화면이 그려지고있는중에 다이얼로그를 띄우고 싶을때

결론

다이얼로그를 띄울때는 웬만하면 WidgetsBinding.instance!.addPostFrameCallback 감싸는게 좋을것같다.
화면이 다 그려지고나서 띄우면 나쁠게 없으니깡

참고)
https://www.didierboelens.com/2019/04/addpostframecallback/

0개의 댓글