Wednesday, February 12, 2020

Flutter에서 페이지 이동 시 popUntil 사용 문제 해결

Flutter에서 페이지 이동 시 popUntil 사용 문제 해결

Flutter 개발을 하다보면 A -> B -> C로 페이지를 이동한 후 다시 A로 돌아가야 하는 경우가 있습니다. 이럴 때 선택할 수 있는 방법은 여러 가지입니다:

  • A 앞의 모든 스택을 지우고 A를 push합니다.
  • C->B->A 순으로 다시 이동합니다.
  • popUntil을 사용하여 C->A로 바로 이동합니다.

하지만, 첫 번째 방법은 A 앞에 스택이 더 있다면 쓰기 어렵고, 두 번째 방법은 A와 C 사이에 B 외의 여러 페이지가 있다면 복잡해집니다. 따라서 대부분은 세 번째 방법인 popUntil을 많이 사용하게 됩니다.

popUntil 작동 문제 해결

그런데 제 경우에는 popUntil이 작동하지 않았습니다. 일반적으로는 간단하게 popUntil(ModalRoute.withName(이동할 루트 네임))으로 사용 할 수 있지만, 제 앱 설정에서 문제가 발생했습니다.

MainApp 위젯인 MaterialApp에서 onGenerateRoute 옵션을 사용하고 있었으며, route 설정은 아래와 같았습니다:


static Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case Login.routeName:
    return Login(),
    );
.....
.....
}

여기서 return 부분을 MaterialPageRoute( builder: (_) => Login(), settings: settings, ); 로 변경해야 합니다. 만약 이렇게 하지 않으면 settings가 전달되지 않아 만들어지는 page의 이름이 null로 들어가게 되어 popUntil를 사용할 수 없게 됩니다.

처음에 대충 설정했던 것이 결국 이런 문제를 만들어냈습니다. 따라서 generateRoute의 정확한 사용법을 익히는 것이 중요합니다.


0 개의 댓글:

Post a Comment