본문 바로가기
Development Solutions/Flutter & Dart

[Flutter][Solved] How to remove screens, widgets and move screens on the stack (스택에 있는 스크린, 위젯 제거하고 스크린 이동하는 방법) (pushNamedAndRemoveUntil)

by studio ODOC 2021. 11. 25.
반응형

 

 

문제 상황 (problem situation)

로그아웃 후에 초기화면으로 돌아갔지만, 뒤로가기 버튼을 누르면 앱 종료가 아닌 이전 화면으로 되돌아갑니다.

 

스크린 이동 순서로 비교하자면 아래와 같겠지요.

 

문제 : 로그인 화면(초기화면) -> ...스크린 이동... -> 로그아웃 화면 -> 로그인 화면 -> 뒤로가기 실행시 직전 화면인 로그아웃 화면으로 진입

원하는 시나리오 : 로그인 화면(초기화면) -> ...스크린 이동... -> 로그아웃 화면 -> 로그인 화면 -> 뒤로가기 실행시 앱 종료

 

(It goes back to the initial screen after logging out, but if you press the back button, it returns to the previous screen instead of closing the app.



If we compare them in the order of screen movement, it would be as follows.



Problem: Login screen (initial screen) -> ...Move screen... -> Logout screen -> Login screen -> Go to the previous logout screen when running Back

Desired Scenario: Login screen (initial screen) -> ...Move screen... -> Logout screen -> Login screen -> Close the app when running Back)

 

 

해결 방법 (Resolution)

Navigator.push 대신 Navigator.pushAndRemoveUntil() 함수를 사용해야 지난 위젯, 스크린이 담긴 스택을 모두 비우고 다음 스크린으로 이동합니다.

(Navigator.pushAndRemoveUntil() function should be used instead of Navigator.push to clear the stack containing the previous widgets and screens and move to the next screen.)

 

- 기존 코드 - (- Existing code -)

Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => LoginPage()),
),

 

- 변경 코드 - (- change code -)

Navigator.pushAndRemoveUntil(
    context, MaterialPageRoute(
    builder: (BuildContext context) =>
        LoginPage()), (route) => false);

 

반응형