// 현재 페이지
Widget build(BuildContext context) {
print('first build()');
return Scaffold(
appBar: AppBar(
title: Text('First'),
),
body: ElevatedButton(
child: Text('다음 페이지로'),
onPressed: () {
final person = Person('장길산', 20);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SecondStateFulPage(
person: person,
)));
},
),
);
// 다음 페이지
Widget build(BuildContext context) {
print('SecondPage build()');
return Scaffold(
appBar: AppBar(
title: Text(widget.person.name),
),
body: ElevatedButton(
child: Text('이전 페이지로'),
onPressed: () {
Navigator.pop(context);
},
));
}
현재 페이지에서 렌더링된 버튼을 클릭하면 다음페이지로 넘어갈 수 있다. 여기서 알게된것은 navigator.pop(context)를 통해 현재 -> 다음 -> 현재 -> 다음 페이지를 수시로 왔다갔다 하여도 Navigator.push( context, materialPageRoute(builder : (context) => [이동할 페이지]);
(양쪽에서 할경우) 마치 페이지가 쌓이는 현사은 벌어지지않고 깔끔하게 현재 화면을 종료하고 이전 화면으로 돌아갈 수가 있다.
MaterialPageRoute
클래스는 안드로이드와 iOS 환경에서 각각 플랫폼에 맞는 화면전환을 지원해준다.
네트워크 환경에서 종종 오래걸리면서 자주 호출되면 안되는 처리가 있다. build() 메서드외에 특정 타이밍에 실행되는 여러 메서드가 있다. 이런 메서드들을 생명주기라고 부른다.
initState() 메서드는 위젯이 생성될 때 호출된다.
dispose() 메서드는 위젯이 완전히 종료될때 호출된다.
initState(), dispose() 메서드를 재정의할 수 있다.
@override
void initState() {
super.initState(); // 반드시 호출해야 합니다.
print('First initstate()');
}
@override
void dispose() {
super.dispose();
print('first dispose()');
}
한 페이지가 렌더링되고 종료될때, 각각 프린트에서 해당 메세지를 확인 할 수 있다.