NavigatorState는 Flutter의 Navigator 위젯의 상태를 나타내는 클래스입니다. Flutter에서 Navigator는 애플리케이션의 화면 전환을 관리합니다. Navigator는 위젯 트리를 사용하여 스택으로 앱의 화면을 구성하고, 앱의 탐색을 구현하기 위한 여러 메소드를 제공합니다.
NavigatorState는 다음과 같은 일반적인 메소드들을 포함합니다:
push(): 새로운 화면(Route)을 스택에 추가하고 화면 전환을 합니다.
pop(): 현재 화면을 스택에서 제거하고 이전 화면으로 돌아갑니다.
replace(): 스택의 현재 화면을 다른 화면으로 교체합니다.
pushNamed(): 미리 정의된 이름을 사용하여 스택에 새로운 화면을 추가하고 화면 전환을 합니다.
popAndPushNamed(): 현재 화면을 스택에서 제거하고 미리 정의된 이름을 사용하여 새로운 화면을 추가합니다.
이러한 메소드들은 앱의 화면 전환을 수행하거나 탐색 스택을 조작하는 데 사용됩니다. 주로 BuildContext를 사용하여 Navigator의 상태를 가져온 다음 해당 메소드를 호출하여 탐색을 수행합니다.
예를 들어, 기본적인 화면 전환은 다음과 같이 수행할 수 있습니다:
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
여기서 context는 현재의 BuildContext이며, SecondScreen()은 새로운 화면의 위젯입니다.
탐색을 처리하기 위해 Flutter에서 제공하는 Navigator와 관련된 주요 클래스들은 다음과 같습니다:
Route: 화면 전환을 나타내는 추상 클래스입니다. 주로 MaterialPageRoute와 같은 구체적인 구현을 사용하게 됩니다.
PageRoute: Route의 추상 서브 클래스로, 위젯 트리의 일부분을 나타내는 특정 경로입니다. 머티리얼 디자인에서는 MaterialPageRoute를 사용하며, Cupertino 디자인에서는 CupertinoPageRoute를 사용합니다.
Navigator: Route 객체를 관리하는 위젯입니다. Navigator는 일반적으로 앱의 전역 상태에 포함되며, 다양한 화면 전환을 제어할 수 있습니다.
다음은 기본적인 예제 코드입니다:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: FirstScreen(),
);
}
}
class FirstScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('First Screen')),
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
},
child: Text('Go to Second Screen'),
),
),
);
}
}
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Second Screen')),
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.pop(context);
},
child: Text('Go back to First Screen'),
),
),
);
}
}
이 예제에서 MyApp은 전체 앱의 루트 위젯이며, FirstScreen과 SecondScreen은 서로 다른 화면의 위젯입니다. ElevatedButton 위젯을 사용하여 각 화면에서 다른 화면으로 전환할 수 있습니다.
Navigator.push() 메소드를 사용하여 SecondScreen으로 이동하고, Navigator.pop() 메소드를 사용하여 FirstScreen으로 돌아갑니다. BuildContext는 이러한 메소드를 호출할 때 매개변수로 전달되며, 애플리케이션의 위젯 트리와 관련된 정보를 제공합니다.
이렇게 Flutter에서는 Navigator, Route, 그리고 관련 메소드들을 사용하여 앱의 화면 전환을 관리하고 탐색을 처리할 수 있습니다. 이를 통해 사용자가 앱 내에서 원활하게 이동할 수 있게 됩니다.