[Flutter] Routes 와 Navigation (feat. 멀티스크린)
2020. 12. 26. 13:46ㆍFlutter
앱에서 단일 스크린(페이지) 앱은 거의? 없을 거라 생각합니다. UX/UI를 생각해서 개발하면 다양한 페이지가 나오는데 이런 멀티 스크린을 어떻게 처리할 지 정리해보겠습니다.
순서
1. 두 개의 경로 만들기
class FirstRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('First Route'),
),
body: Center(
child: ElevatedButton(
child: Text('Open route'),
onPressed: () {
// Navigate to second route when tapped.
},
),
),
);
}
}
class SecondRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Second Route"),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// Navigate back to first route when tapped.
},
child: Text('Go back!'),
),
),
);
}
}
간단하게 페이지를 2개 만든다고 생각하면 될 것 같습니다. 2개의 Stateless한 위젯을 만들어 서로 라우팅하도록 합니다.
2. Navigator.push()를 사용하여 두 번째 경로로 이동.
push로 경로stack에 경로를 추가합니다. 팬케이크를 예로 들면 팬케이크는 위로 하나씩 쌓이고, 실제 화면을 볼 수 있는 것은 맨 위의 팬케이그가 떨어질 때 (navigatior.pop) 입니다.
Navigator.push()로 Route가 관리하는 경로 stack에 추가할 수 있습니다.
위의 1번에서 FirstRoute에서 onPressed() 콜백을 아래 코드로 수정합니다
// Within the `FirstRoute` widget
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondRoute()),
);
}
3. Navigator.pop()을 사용하여 첫 번째 경로로 돌아감.
두 번째 route를 답고 다시 첫 번째 route로 돌아가는 방법은?
-> Navigator.pup()을 이용해 Route를 관리하는 경로 stack에서 현재 route를 pop해 이전으로 돌아갑니다.
아래 코드에서 SecondRoute에서 onPressed() 콜백을 아래 코드로 수정합니다.
// Within the SecondRoute widget
onPressed: () {
Navigator.pop(context);
}
# Navigator로 이동할 때 data도 같이 넘겨 주는 방법.
[참고]
'Flutter' 카테고리의 다른 글
[Flutter] Dart 문법 Null인식연산자 (0) | 2021.01.01 |
---|---|
[Flutter] Stateful 위젯 생명주기 메서드 (0) | 2020.12.31 |
[Flutter] Flutter에서 Dart 문법(2) - Functions as First Order Objects (2) | 2020.12.19 |
[Flutter] Flutter에서 Dart 문법 (enum 타입 , 삼항 연산자, Map 타입) (0) | 2020.12.13 |
[Flutter] 사용자 동작(제스터)를 감지하는 GestureDetector위젯 (0) | 2020.12.12 |