여기서는 Flutter 앱에서 Navigator.push, Navigator.pop, 그리고 await를 사용하는 예제를 만들어 보겠습니다.
이 예제는 HomeScreen에서 SecondScreen으로 이동하여, 값을 설정한 후 다시 HomeScreen으로 돌아오면서 설정한 값을 가져오는 방식으로 동작합니다.
예제: HomeScreen에서 SecondScreen으로 이동해 설정값을 받아오는 코드
HomeScreen - SecondScreen으로 이동하고 결과를 받아오는 메인 화면.
SecondScreen - 값을 설정하고, HomeScreen으로 반환하는 설정 화면.
main.dart
코드 복사
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
home: HomeScreen(),
));
}
HomeScreen.dart
코드 복사
import 'package:flutter/material.dart';
import 'SecondScreen.dart';
class HomeScreen extends StatefulWidget {
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
String resultText = "No result yet"; // SecondScreen에서 받은 값을 저장
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Home Screen")),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(resultText, style: TextStyle(fontSize: 24)),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
// SecondScreen으로 이동하고 결과값을 기다림
final result = await Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => SecondScreen(),
// return 을 사용할 수도 있다.
//return SecondScreen(가져갈 변수 쓰기);
),
);
// SecondScreen에서 값이 반환되면 업데이트
if (result != null) {
setState(() {
resultText = result; // result 값을 UI에 반영
});
}
},
child: Text("Go to Second Screen"),
),
],
),
),
);
}
}
SecondScreen.dart
코드 복사
import 'package:flutter/material.dart';
class SecondScreen extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Second Screen")),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("Set a result and go back", style: TextStyle(fontSize: 24)),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
// "Result from SecondScreen"을 반환하며 SecondScreen을 닫음
Navigator.of(context).pop("Result from SecondScreen");
},
child: Text("Send Result"),
),
],
),
),
);
}
}
코드 설명
HomeScreen:
SecondScreen: