[Flutter] GetX의 BottomSheet에서 라우트 이동 불가

Tykan·2021년 6월 1일
1
post-thumbnail

GetX 스낵바가 굉장히 편해서 스낵바 부분만 활용하기 위해 GetX를 쓰기 시작했다.

그러다가 이외에도 손쉽게 관리할 수 있는 부분이 많아 기존에 Provider를 통한 상태관리도 GetX로 갈아탈 준비를 하고 있다.

시트, 라우팅 등 다른 기능들도 교체를 하다가 잘되던 라우팅이 안되는 문제가 생겼다 😭

문제점

  1. GetX BottomSheet에서 Named 라우트로 이동
  2. Get.back()을 통해 BottomSheet로 복귀
  3. 다시 Named 라우트 호출 시 이동 불가

원인

원인은 간단하다.

GetX의 preventDuplicates로 인해 동일한 이름의 라우트 생성이 불가하다.

GetX 문서를 보면 해당 기능은 사용자가 실수로 버튼을 빠르게 여러번 클릭했을때 중복 페이지가 생기는 것을 방지하는 기능이다.

그런데 여기서 한가지 의문점!!
나는 Get.back()으로 페이지를 나갔는데 왜 그럴까?

해당 부분에서 직접 RouteName을 찍어보면 알 수 있다.

BottomSheet - Page 2에서 Get.back()을 하면
Page 2가 여전히 열려 있는 페이지로 인식한다.
실제로는 Page2가 닫혀있고 BottomSheet가 현재 라우트다.

아마 Snackbar와 BottomSheet 같은 overlay Route는
실질적인 PageRoute가 아니라서 라우트 옵저버에서 갱신을 하지 않는 듯...

해결 방법

Get.toNamed([Page 이름]); // 이 부분을
Get.toName([Page 이름], preventDuplcates: false); // 이렇게 바꾸자

저 옵션을 비활성화하게 되면
당연히 라우팅 버튼을 빠르게 누를 때 페이지가 여러개 생긴다.
이 부분은 boolean 변수 하나를 이용하든, 편한 방법으로 꼭 막아주는게 좋다.

주저리...주저리...

위 해결방법은 기능상 문제가 없을 뿐이다.
GetX 라우트관리에서 의미적으로는 Get.back()시 이전에 시트가 있는 상태이더라도 Observer를 갱신해서 페이지 재이동이 가능하게끔 해야한다.

이 부분은 깃허브 이슈에 코멘트를 달아놓아서 GetX 개발자의 답변을 기다리고 있다.
일단 임시적인 해결은 됐으니 기다려보고, 패키지 업데이트 안 해주면 커스텀하는 수 밖에ㅠ

profile
개발자 Theo :: 고민은 성장의 힘

0개의 댓글