go_router
개요
go_router는 Flutter의 패키지로, 내비게이션 기능을 제공한다. Flutter 자체적으로도 내비게이션 기능이 있으나, go_router는 더욱 강력한 기능을 제공한다.
https://pub.dev/packages/go_router
기본 개념
go_router는 URI 기반으로 작동한다. URL 패턴을 정의하고, 해당 URL을 사용해서 내비게이션을 한다.
named route: go_router는 기본적으로 URI 기반으로 작동하는데, 각각의 URI에 유니크한 "이름(name)"을 줄 수 있다. context.goNamed가 해당 이름을 사용하는 API이다.
클래스 구조
RouteBase - GoRoute - ShellRoute
go_router의 Route는 기본적으로 트리 구조로 이루어진다. 트리 구조를 타고 URL 매칭을 수행한다. 부모 Route와 매칭이 되면 자식 Route들에 대해서 매칭을 수행하는 형태이다. 코드에서 먼저 작성된 자식 Route가 우선순위를 가진다.
GoRoute는 부모 Route 위에 표시되는 Route이다. 루트 Navigator 또는 가장 가까운 ShellRoute의 조상 Navigator 또는 parentNavigatorKey와 일치하는 Navigator에 해당 페이지가 전달된다.
ShellRoute는 일종의 "껍데기"로서 자식 Route들을 보여주는 또다른 Navigator를 가지게 된다. ShellRoute의 builder 메소드에는 child 파라미터가 들어오게 된다. 이 child 파라미터가 매칭된 자식 Route들이 만드는 위젯이다. builder 메소드에서 해당 자식 Route 위젯을 보여주는 "껍데기"를 만들어주면 된다. BottomNavigationBar 등을 이용한 내비게이션이 필요할 때는 StatefulShellRoute 클래스를 사용하면 유용하다.
버그
- 버전 13 이상에서 PopScope, WillPopScope가 이상하게 작동하는 버그가 보고되어있다. 빠르게 해결하기 위해선 버전 12로 다운그레이드하면 된다. 참고: https://www.reddit.com/r/flutterhelp/comments/193utq0/pop_scope_willpopscope_not_working/ https://github.com/flutter/flutter/issues/138737