Navigator.of(context).push(MaterialPageRoute(builder: (context) => const FirstPage()));
데이터는 생성자를 통해 전달
routes: {
"/first": (context) => const FirstPage(),
},
MaterialApp위젯의 routes 부분에 key-value 형태로 사용하고자 하는 라우터 네임과 위젯을 등록
MaterialApp(
title: 'Flutter Widgets',
theme: ThemeData(
primaryColor: Colors.blue,
brightness: Brightness.dark),
initialRoute: HomeScreen.routeName,
routes: routes
)
final routes = {
HomeScreen.routeName: (context) => HomeScreen(),
SecondScreen.routeName: (context) => SecondScreen(),
};
Navigator.pushNamed(context, SecondScreen.routeName);
데이터는 생성자를 key-value를 통해 전달
build(BuildContext context) {
Map<String, dynamic> _argument =
ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>;
print(_argument["title"]);
...
}
Widget
Navigator.of(context).pushNamed("/first", arguments: {"title": "Test"});
: 페이지를 오픈할 때 스택에 쌓여있는 페이지를 제거하고 이동하는 방법
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(
builder: (context) => const HomePage()),
(route) => false
);
: pushAndRemoveUntil 방법과 동일한 named 방식
Navigator.of(context).pushNamedAndRemoveUntil("/home", (route) => false);
: 페이지 하나만 제거하고 이동할 때 사용가능 → named방식만 제공
Navigator.of(context).popAndPushNamed("/second");
second 페이지는 제거됨
: 쌓여있는 스택을 하나씩 닫고 이전페이지로 돌아감
⚠️ 이전 페이지로 이동할 때에도 데이터를 전달할 수 있음Navigator.of(context).pop("callBack");
→ object로도 전달이 가능함
: 닫을 수 있는 페이지가 있는 지 확인
Navigator.of(context).canPop();
: 닫을 수 있으면 닫고 닫을 수 없으면 더 이상 닫지 않는 기능
Navigator.of(context).maybePop();
: 모든페이지를 닫는 방법
Navigator.of(context).popUntil((route) => route.isFirst);
→ 최하단 라우터를 제외하고 닫아주게 됨