Flutter Navigator push/ pop (extra, if mounted)

Angela Jeong·2024년 2월 7일
0

Flutter Troubleshooting

목록 보기
4/19

Navigator push 혹은 popd을 활용할 때 if mounted 혹은 extra를 추가해야만 원하는 대로 페이지가 전환되는 경우가 있다.

1) 동작이 끝난 후 페이지를 넘기려면 if (mounted)를 추가하자

onTap: () {
  viewModel.deleteStorage();
  Navigator.of(context).pop();
  if (mounted) {
    context.go('/second_page');
    }},
  • onTap을 했을 때 deleteStorage 함수와 Navigator.pop이 실행되고 그 후에 second_page로 이동해야한다.
  • 동작이 모두 끝난 후에 페이지 이동이 되어야 하기 때문에 if (mounted)를 추가하자.
  • 즉 마운트가 된 이후에 이동한다는 뜻이다.

    *참고: 마운트란?
    위젯이나 컴포넌트가 화면에 표시되고 활성화되는 과정이다.
    비동기 작업을 수행한 후에 해당 위젯이 아직 화면에 표시되어 있지 않은 경우, 결과를 처리하기 전에 마운트되어 있는지 확인해야한다.



2) Page가 아닌 screen으로 이동시킬 땐 extra에 인덱스를 추가하자

onTap: () {
  viewModel.deleteStorage();
  Navigator.of(context).pop();
  if (mounted) {
    context.go('/main_page', extra: 1);
    }},
  • 예를 들어 메인 화면에서 bottomNavigation을 통해 screen만 이동시킬 경우 엄밀히 페이지로 이동시키는 것은 아니다.
  • 따라서 메인 화면의 인덱스로 이동시켜주자

0개의 댓글