내가 주로 사용하는 방법
routes.dart
import 'package:flutter/material.dart';
import 'package:my_dream/login/StudentIdentityCheck.dart';
import 'package:my_dream/login/login.dart';
import 'package:my_dream/main_screen.dart';
import 'package:my_dream/start_Page.dart';
final Map<String, WidgetBuilder> appRoutes = {
'/LoginPage': (context) => const LoginPage(), // 로그인 회원가입 페이지
'/TextPage': (context) => const LoginPage(), // 로그인 회원가입 페이지
'/StudentIdentityCheck': (context) =>
const StudentIdentityCheck(), // 학생 인증 페이지
'/MainScreen': (context) => const MainScreen(), // 메인화면 페이지
'/StartPage': (context) => const StartPage(), // 로그인 전 페이지
};
main.dart
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
routes: appRoutes, // => 여기가 포인트
initialRoute: widget.isLoggedIn ? '/MainScreen' : '/StartPage',
);
}
}
사용방법
화면 이동하는 기능 (서로 자유롭게 이동 가능 ⇒ 이전 화면으로도)
Navigator.pushNamed(context, '/원하는 페이지');
화면 이동하는 기능 (이전 화면으로 이동 불가)
Navigator.pushReplacementNamed(context, '/원하는 페이지');
화면 이동하는 기능 (이전 화면 스택 제거)
Navigator.pushNamedAndRemoveUntil(context, '/원하는 페이지', (Route<dynamic> route) => false);
predicate
)이 참이 될 때까지 이전의 모든 화면을 스택에서 제거합니다. 위 예에서 **(route) => false
**는 모든 이전 화면을 제거하라는 의미입니다. 이를 통해 사용자가 뒤로 가려고 할 때 이전에 방문했던 페이지들로 돌아갈 수 없게 됩니다, 주로 로그인 후 메인 화면으로 이동 시 로그인 관련 페이지들을 스택에서 완전히 제거하고 싶을 때 사용합니다.