플러터에서는 기본적으로 Navigator.pop
또는 Navigator.push
를 이용해서 페이지를 이동하는데 이 페이지 이동을 간결하면서 더 다양한 기능을 이용할 수 있도록 확장해주는 플러그인이다.
마치 웹에서 redirect를 걸어주듯이 하는 느낌이라고 생각하면 된다.
go_router 플러그인의 build_runner 사용 코드 제네레이터
최상위 레벨 필드로 페이지를 설정하는 변수를 선언하고 MaterialApp.router
또는 Cupertino.router
를 이용해 routerConfig 를 설정해주면 된다.
아마 기본 설정된 페이지 이동 애니메이션을 안드로이드용으로 쓸지 아이폰용으로 쓸지 구분하는 용도인 것 같다(추가 정보 필요)
또는 CustomTransitionPage()
를 통해 커스텀 애니메이션을 적용할 수 있다.
import 'package:go_router/go_router.dart';
// GoRouter configuration
final _router = GoRouter(
routes: [
GoRoute(
path: '/',
builder: (context, state) => const Page1Screen(),
),
GoRoute(
path: '/page2',
builder: (context, state) => const Page2Screen(),
),
],
);
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp.router(
routerConfig: _router,
);
}
}
GoRouter 위젯 안의 routes 파라미터에 GoRoute 위젯을 배열로 선언해주면 된다.
GoRoute 위젯은 path와 Builder 가 반드시 선언되어야 한다.
builder 파라미터는 pageBuilder 파라미터로 대체할 수 있다.
context.go
나 context.push
또는 context.pop
을 이용하여 페이지를 이동할 수 있다.
go는 현재 스크린 스택에 있는 페이지를 대체하는 새로운 페이지를 생성하는 방식이며 push는 Navigator 클래스의 히스토리 스택 위에 페이지를 쌓는 방식이다.