Named route 화면 전환
https://flutter-ko.dev/docs/cookbook/navigation/named-routes
Named route로의 화면 전환
[새로운 화면으로 이동하고, 되돌아오기](/docs/cookbook/navigation/navigation-basics/)예제에서는 Route를 생성하고,[`Navigator`]({{site.api}}/flutter/widgets/Navigator-class.html)에 전달하여 새로운 화면으로 전환하는
flutter-ko.dev
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
title: 'Named routes Demo',
// "/"을 앱이 시작하게 될 route로 지정합니다. 본 예제에서는 FirstScreen 위젯이 첫 번째 페이지가
// 될 것입니다.
initialRoute: '/',
routes: {
// When we navigate to the "/" route, build the FirstScreen Widget
// "/" Route로 이동하면, FirstScreen 위젯을 생성합니다.
'/': (context) => FirstScreen(),
// "/second" route로 이동하면, SecondScreen 위젯을 생성합니다.
'/second': (context) => SecondScreen(),
},
));
}
class FirstScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('First Screen'),
),
body: Center(
child: RaisedButton(
child: Text('Launch screen'),
onPressed: () {
// Named route를 사용하여 두 번째 화면으로 전환합니다.
Navigator.pushNamed(context, '/second');
},
),
),
);
}
}
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Second Screen"),
),
body: Center(
child: RaisedButton(
onPressed: () {
// 현재 route를 스택에서 제거함으로써 첫 번째 스크린으로 되돌아 갑니다.
Navigator.pop(context);
},
child: Text('Go back!'),
),
),
);
}
}
위 코드는 flutter에서 제공하는 샘플 소스로 dartpad에서 실행해 보면 결과를 알수 있습니다.
dartpad 버전이 3.3.0 버전 이상에서는 RaisedButton에서 에러가 발생할 수 있습니다. 아래 URL에서 처럼 수정해서 해결할 수 있습니다.
flutter material button - The method 'FlatButton' isn't defined
flutter로 작성한 프로젝트에서 flutter 3.0.0에서 3.3.0으로 upgrade를 했습니다. 정상적으로 업그레이드를 마친 후 프로젝트를 여니 FlatButton에서 에러가 발생하고 있었습니다. "The method 'FlatButton' isn't de
direction-to-money.tistory.com
위 코드를 간략하면 설명하면 다음과 같습니다.
- 두 개의 화면 만들기.
FristScreen, SecondScreen - Route 정의하기
'/', '/second' - Navigator.pushNamed를 사용하여 두 번째 화면으로 전환하기.
- Navigator.pop을 사용하여 첫 번째 화면으로 돌아가기.
Splash Screen
위 코드에 SplashScreen을 추가하겠습니다. 동작은 앱 시작 시 5초 동안 SplashScreen 화면을 보여 주고 자동으로 FirstScreen으로 넘어가는 샢플 소스 입니다.
import 'package:flutter/material.dart';
import 'dart:async';
void main() {
runApp(MaterialApp(
title: 'Named routes Demo',
// "/"을 앱이 시작하게 될 route로 지정합니다. 본 예제에서는 FirstScreen 위젯이 첫 번째 페이지가
// 될 것입니다.
initialRoute: 'splash',
routes: {
'splash': (context) => SplashScreen(),
// When we navigate to the "/" route, build the FirstScreen Widget
// "/" Route로 이동하면, FirstScreen 위젯을 생성합니다.
'/': (context) => FirstScreen(),
// "/second" route로 이동하면, SecondScreen 위젯을 생성합니다.
'/second': (context) => SecondScreen(),
},
));
}
class SplashScreen extends StatefulWidget {
@override
SplashScreenState createState() => new SplashScreenState();
}
class SplashScreenState extends State<SplashScreen> {
startTime() async {
var _duration = new Duration(seconds: 5);
return new Timer(_duration, navigationPage);
}
void navigationPage() {
Navigator.of(context).pushReplacementNamed('/');
}
@override
void initState() {
startTime();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text('Splash Screen'),),
);
}
}
class FirstScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('First Screen'),
),
body: Center(
child: ElevatedButton(
child: Text('Launch screen'),
onPressed: () {
// Named route를 사용하여 두 번째 화면으로 전환합니다.
Navigator.pushNamed(context, '/second');
},
),
),
);
}
}
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Second Screen"),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 현재 route를 스택에서 제거함으로써 첫 번째 스크린으로 되돌아 갑니다.
Navigator.pop(context);
},
child: Text('Go back!'),
),
),
);
}
}
위 코드를 간략하면 설명하면 다음과 같습니다.
- routes에 'splash' 추가
- SplashScreen 추가
- SplashScreen에 initState 추가
- SplashScreen 시작 시 initState가 동작함
- initState에서 timer가 동작하는 startTime 호출 - SplashScreen 내 timer 추가
5초 후 navigationPage() 실행 - navigationPage() 추가
Navigator.of(context).pushReplacementNamed('/')로 FirstScreen으로 자동 이동
'프로그램 개발해서 돈벌기 > flutter' 카테고리의 다른 글
부동 소수점 연산 버그로 발생한 실제 사건을 Dart 코드로 검증 해 보고 해결해 보기 (0) | 2023.01.25 |
---|---|
10. 클래스 (class) - 완전 초보 Dart 언어 기초 문법 : flutter (0) | 2022.12.31 |
flutter material button - The method 'FlatButton' isn't defined (0) | 2022.12.30 |
flutter upgrade와 zsh: command not found: flutter (0) | 2022.12.30 |
9. typedef - 완전 초보 Dart 언어 기초 문법 : flutter (0) | 2022.12.23 |
댓글