
이번에는 Navigator을 이용한 화면전환과, 위젯에서 필수 매개변수를 받는 방법에 대해서 정리해보고자 한다.
목차
1.Navigator을 이용한 화면전환
2.위젯 필수 매개변수로 받기
Navigator을 이용한 화면전환
플러터에서는 Navigator의 push() 메소드를 통해 화면전환이 가능하다. Navigator.push()에 전환할 페이지를 MaterialPageRoute()에 넣어주면 된다.
- main.dart
Navigator.push(context, MaterialPageRoute(builder: (context) => FirstScreen()));
다음은 화면 전환의 예제이다. 만약에 전환할 페이지에 매개변수를 넘겨야 한다면, 전환할 페이지의 ()안에 매개변수를 적어서 넘겨주면 된다.
- main.dart
import 'package:flutter/material.dart';
import 'package:practice/project1/result.dart';
class project1 extends StatefulWidget {
const project1({super.key});
@override
State<project1> createState() => _project1State();
}
class _project1State extends State<project1> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("비만도 계산기"),
),
body: Padding(
// 패딩은 이렇게 줍니다.
padding: const EdgeInsets.all(8.0),
child: Form(
child: Column(
// 정렬 방향 조정
crossAxisAlignment: CrossAxisAlignment.end,
children: [
TextFormField(
decoration: const InputDecoration(
border: OutlineInputBorder(),
hintText: "키",
),
//keyboardType으로 키보드를 뭘로 지정할껀지 가능
keyboardType: TextInputType.number,
),
// 빈 공간은 SizeBox로 처리한다.
const SizedBox(height: 8,),
TextFormField(
decoration: const InputDecoration(
border: OutlineInputBorder(),
hintText: "몸무게",
),
keyboardType: TextInputType.number,
),
const SizedBox(height: 8,),
ElevatedButton(
onPressed: (){
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const Resultscreen(
height: 180,
weight: 77.5
),)
);
},
child: Text('결과'),
),
],
),
),
)
);
}
}
위젯 필수 매개변수로 받기
만약 위젯에 매개변수를 받아야 한다면, 이를 다음과 같이 작성이 가능하다. 다음은 Stateless 위젯에서 매개변수를 받는 예제인데, height, weight 두 개 변수를 만들고, required을 이용하여 필수로 매개변수를 받도록 조정한다.
- main.dart
import 'package:flutter/material.dart';
class Resultscreen extends StatelessWidget {
final double height;
final double weight;
const Resultscreen({super.key, required this.height, required this.weight});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('결과'),
),
body: const Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"정상",
style: TextStyle(fontSize: 36),
),
Icon(Icons.sentiment_satisfied, color: Colors.green, size: 100),
],
)));
}
}
'FrameWork > Flutter' 카테고리의 다른 글
visual studio code에서 flutter 코드 정렬 할 때, 위젯 별로 정렬되지 않은 문제 해결하기 (0) | 2025.02.24 |
---|---|
StatefulWidget와 StatelessWidget 알아보기 (0) | 2023.11.09 |
Flutter 프로젝트 디렉토리 구조, 위젯 알아보기 (0) | 2023.11.09 |
WillPopScope을 통해 뒤로가기 버튼 기능 활성화 하기 (0) | 2023.11.09 |
웹 뷰(WebView) 사용하기 (1) | 2023.11.09 |