mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
108 lines
3.5 KiB
Dart
108 lines
3.5 KiB
Dart
import 'package:flutter/widgets.dart';
|
|
import 'package:go_router/go_router.dart';
|
|
import 'package:spotify/spotify.dart' hide Search;
|
|
import 'package:spotube/utils/platform.dart';
|
|
import 'package:spotube/components/shared/spotube_page_route.dart';
|
|
import 'package:spotube/pages/album/album.dart';
|
|
import 'package:spotube/pages/artist/artist.dart';
|
|
import 'package:spotube/pages/genre/genres.dart';
|
|
import 'package:spotube/pages/library/library.dart';
|
|
import 'package:spotube/pages/desktop_login/login_tutorial.dart';
|
|
import 'package:spotube/pages/desktop_login/desktop_login.dart';
|
|
import 'package:spotube/pages/lyrics/lyrics.dart';
|
|
import 'package:spotube/pages/player/player.dart';
|
|
import 'package:spotube/pages/playlist/playlist.dart';
|
|
import 'package:spotube/pages/root/root_app.dart';
|
|
import 'package:spotube/pages/search/search.dart';
|
|
import 'package:spotube/pages/settings/settings.dart';
|
|
import 'package:spotube/pages/mobile_login/mobile_login.dart';
|
|
|
|
final rootNavigatorKey = GlobalKey<NavigatorState>();
|
|
final shellRouteNavigatorKey = GlobalKey<NavigatorState>();
|
|
final router = GoRouter(
|
|
navigatorKey: rootNavigatorKey,
|
|
routes: [
|
|
ShellRoute(
|
|
navigatorKey: shellRouteNavigatorKey,
|
|
builder: (context, state, child) => RootApp(child: child),
|
|
routes: [
|
|
GoRoute(
|
|
path: "/",
|
|
pageBuilder: (context, state) =>
|
|
SpotubePage(child: const GenrePage()),
|
|
),
|
|
GoRoute(
|
|
path: "/search",
|
|
name: "Search",
|
|
pageBuilder: (context, state) =>
|
|
SpotubePage(child: const SearchPage()),
|
|
),
|
|
GoRoute(
|
|
path: "/library",
|
|
name: "Library",
|
|
pageBuilder: (context, state) =>
|
|
SpotubePage(child: const LibraryPage()),
|
|
),
|
|
GoRoute(
|
|
path: "/lyrics",
|
|
name: "Lyrics",
|
|
pageBuilder: (context, state) =>
|
|
SpotubePage(child: const LyricsPage()),
|
|
),
|
|
GoRoute(
|
|
path: "/settings",
|
|
pageBuilder: (context, state) => SpotubePage(
|
|
child: const SettingsPage(),
|
|
),
|
|
),
|
|
GoRoute(
|
|
path: "/album/:id",
|
|
pageBuilder: (context, state) {
|
|
assert(state.extra is AlbumSimple);
|
|
return SpotubePage(child: AlbumPage(state.extra as AlbumSimple));
|
|
},
|
|
),
|
|
GoRoute(
|
|
path: "/artist/:id",
|
|
pageBuilder: (context, state) {
|
|
assert(state.params["id"] != null);
|
|
return SpotubePage(child: ArtistPage(state.params["id"]!));
|
|
},
|
|
),
|
|
GoRoute(
|
|
path: "/playlist/:id",
|
|
pageBuilder: (context, state) {
|
|
assert(state.extra is PlaylistSimple);
|
|
return SpotubePage(
|
|
child: PlaylistView(state.extra as PlaylistSimple),
|
|
);
|
|
},
|
|
),
|
|
],
|
|
),
|
|
GoRoute(
|
|
path: "/login",
|
|
parentNavigatorKey: rootNavigatorKey,
|
|
pageBuilder: (context, state) => SpotubePage(
|
|
child: kIsMobile ? const WebViewLogin() : const DesktopLoginPage(),
|
|
),
|
|
),
|
|
GoRoute(
|
|
path: "/login-tutorial",
|
|
parentNavigatorKey: rootNavigatorKey,
|
|
pageBuilder: (context, state) => SpotubePage(
|
|
child: const LoginTutorial(),
|
|
),
|
|
),
|
|
GoRoute(
|
|
path: "/player",
|
|
parentNavigatorKey: rootNavigatorKey,
|
|
pageBuilder: (context, state) {
|
|
return SpotubePage(
|
|
child: const PlayerView(),
|
|
);
|
|
},
|
|
),
|
|
],
|
|
);
|