onPressed: () async {
final result = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondPage()),
);
print(result);
// 이동된 다른 페이지에서 pop 할 때 result 전달
Navigator.pop(context, 'Save OK');
다른 페이지로 이동하는 이벤트 처리이다.
Navigator.push로 내 context와 route(MaterialPageRoute)를 담아서 보낸다.
startActivityForResult 처럼 이동한 페이지로부터 값을 받아오기 위해 async, await 방식으로 결과값을 기다린다.
final result = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondPage2(person: person)),
);
값을 받을 페이지에서 생성자로 person을 받도록 하면
class SecondPage2 extends StatelessWidget {
final Person2 person;
SecondPage2({Key? key, required this.person}) : super(key: key);
이를 받는 페이지에서는 required로 값을 확정적으로 받도록 하였다.
Navigator.pushNamed(context, '/second');
Navigator.pushNamed
는 /second라는 라우트 이름을 가지는 화면으로 이동하도록 하는 것이다.
이 라우트들은 routes라는 app 속성에서 정의해준다.
build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
routes: {
'/first': (context) => FirstPage(),
'/second': (context) => SecondStatefulPage(),
},
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MenuPage(),
);
}
}
Widget