2026-01-12 22:27:46 +09:00
|
|
|
/// 앱 라우터 설정
|
|
|
|
|
library;
|
|
|
|
|
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:go_router/go_router.dart';
|
|
|
|
|
import '../views/main_shell.dart';
|
|
|
|
|
import '../views/home/home_view.dart';
|
|
|
|
|
import '../views/members/members_view.dart';
|
|
|
|
|
import '../views/album/album_view.dart';
|
2026-01-13 10:42:52 +09:00
|
|
|
import '../views/album/album_detail_view.dart';
|
2026-01-13 13:02:40 +09:00
|
|
|
import '../views/album/album_gallery_view.dart';
|
2026-01-13 11:59:12 +09:00
|
|
|
import '../views/album/track_detail_view.dart';
|
2026-01-12 22:27:46 +09:00
|
|
|
import '../views/schedule/schedule_view.dart';
|
2026-01-15 21:27:24 +09:00
|
|
|
import '../views/schedule/schedule_detail_view.dart';
|
2026-01-12 22:27:46 +09:00
|
|
|
|
|
|
|
|
/// 네비게이션 키
|
|
|
|
|
final GlobalKey<NavigatorState> rootNavigatorKey = GlobalKey<NavigatorState>();
|
|
|
|
|
|
|
|
|
|
/// 앱 라우터 설정
|
|
|
|
|
final GoRouter appRouter = GoRouter(
|
|
|
|
|
navigatorKey: rootNavigatorKey,
|
|
|
|
|
initialLocation: '/',
|
|
|
|
|
routes: [
|
|
|
|
|
// 메인 셸 (바텀 네비게이션)
|
|
|
|
|
ShellRoute(
|
|
|
|
|
builder: (context, state, child) => MainShell(child: child),
|
|
|
|
|
routes: [
|
|
|
|
|
GoRoute(
|
|
|
|
|
path: '/',
|
|
|
|
|
pageBuilder: (context, state) => const NoTransitionPage(
|
|
|
|
|
child: HomeView(),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
GoRoute(
|
|
|
|
|
path: '/members',
|
|
|
|
|
pageBuilder: (context, state) => const NoTransitionPage(
|
|
|
|
|
child: MembersView(),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
GoRoute(
|
|
|
|
|
path: '/album',
|
|
|
|
|
pageBuilder: (context, state) => const NoTransitionPage(
|
|
|
|
|
child: AlbumView(),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
GoRoute(
|
|
|
|
|
path: '/schedule',
|
|
|
|
|
pageBuilder: (context, state) => const NoTransitionPage(
|
|
|
|
|
child: ScheduleView(),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
2026-01-13 10:42:52 +09:00
|
|
|
// 앨범 상세 (셸 외부)
|
|
|
|
|
GoRoute(
|
|
|
|
|
path: '/album/:name',
|
|
|
|
|
parentNavigatorKey: rootNavigatorKey,
|
|
|
|
|
builder: (context, state) {
|
|
|
|
|
final albumName = state.pathParameters['name']!;
|
|
|
|
|
return AlbumDetailView(albumName: albumName);
|
|
|
|
|
},
|
|
|
|
|
),
|
2026-01-13 11:59:12 +09:00
|
|
|
// 트랙 상세 (셸 외부)
|
|
|
|
|
GoRoute(
|
|
|
|
|
path: '/album/:albumName/track/:trackTitle',
|
|
|
|
|
parentNavigatorKey: rootNavigatorKey,
|
|
|
|
|
builder: (context, state) {
|
|
|
|
|
final albumName = state.pathParameters['albumName']!;
|
|
|
|
|
final trackTitle = state.pathParameters['trackTitle']!;
|
|
|
|
|
return TrackDetailView(
|
|
|
|
|
albumName: albumName,
|
|
|
|
|
trackTitle: trackTitle,
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
),
|
2026-01-13 13:02:40 +09:00
|
|
|
// 앨범 갤러리 (컨셉포토 전체보기)
|
|
|
|
|
GoRoute(
|
|
|
|
|
path: '/album/:name/gallery',
|
|
|
|
|
parentNavigatorKey: rootNavigatorKey,
|
|
|
|
|
builder: (context, state) {
|
|
|
|
|
final albumName = state.pathParameters['name']!;
|
|
|
|
|
return AlbumGalleryView(albumName: albumName);
|
|
|
|
|
},
|
|
|
|
|
),
|
2026-01-15 21:27:24 +09:00
|
|
|
// 일정 상세 (셸 외부)
|
|
|
|
|
GoRoute(
|
|
|
|
|
path: '/schedule/:id',
|
|
|
|
|
parentNavigatorKey: rootNavigatorKey,
|
|
|
|
|
builder: (context, state) {
|
|
|
|
|
final scheduleId = int.parse(state.pathParameters['id']!);
|
|
|
|
|
return ScheduleDetailView(scheduleId: scheduleId);
|
|
|
|
|
},
|
|
|
|
|
),
|
2026-01-12 22:27:46 +09:00
|
|
|
],
|
|
|
|
|
);
|