Do it 플러터 앱 프로그래밍 책 공부하기
책의 내용을 정리하면서 공부하기 위해, 글을 작성한다.
한 페이지로도 앱을 만들 수 있지만 기능이 많으면 화면을 구성하기가 어렵고 로딩이 느려지기도 한다.
네비게이션 기능은 앱이 제공하는 기능이나 메뉴별로 화면을 분리해서 개발하는 방법
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
title: 'Subpage Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: FirstPage(),
);
}
}
class FirstPage extends StatefulWidget {
State<FirstPage> createState() => _FirstPage();
}
class _FirstPage extends State<FirstPage> {
Widget build(BuildContext context){
return null;
}
}
class _FirstPage extends State<FirstPage> {
Widget build(BuildContext context){
return Scaffold(
appBar: AppBar(
title: Text('Sub Page Main '),
),
body: Container(
child: Center(
child: Text('첫 번째 페이지'),
),
),
floatingActionButton: FloatingActionButton(
onPressed: (){},
child: Icon(Icons.add),
),
);
}
}
_FirstPage 아래에 StatelessWidget을 상속받아 SecondPage 클래스를 만든다.
class SecondPage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Second Page'),
),
body: Container(
child: Center(
child: RaisedButton(
onPressed: (){},
child: Text('돌아가기'),
),
)
)
);
}
}
floatingActionButton: FloatingActionButton(
onPressed: (){
Navigator.of(context)
.push(MaterialPageRoute(builder: (context)=> SecondPage()));
},
child: Icon(Icons.add),
),
위의 코드를 해석해 보자!
class SecondPage extends StatelessWidget{
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Second Page'),
),
body: Container(
child: Center(
child: RaisedButton(
onPressed: (){
Navigator.of(context).pop();
},
child: Text('돌아가기'),
),
)
)
);
}
}
main.dart에서 MaterialApp을 선언하는 부분에 Home을 지우고 다음과 같이 코드를 작성한다.
기존 코드를 라우트를 이용한 페이지이동을 위한 코드로 바꾸어 보자.