feat: app 端 ui 设计完成

This commit is contained in:
liqupan
2026-01-28 19:10:19 +08:00
commit a4e7898e94
149 changed files with 11302 additions and 0 deletions

View File

@@ -0,0 +1,135 @@
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import '../screens/main/main_screen.dart';
import '../screens/discovery/discovery_screen.dart';
import '../screens/library/library_screen.dart';
import '../screens/control/control_screen.dart';
import '../screens/control/free_control_screen.dart';
import '../screens/control/pattern_control_screen.dart';
import '../screens/profile/profile_screen.dart';
import '../screens/profile/settings_screen.dart';
import '../screens/profile/topup_screen.dart';
import '../screens/profile/device_manager_screen.dart';
import '../screens/profile/subscription_screen.dart';
import '../screens/profile/privacy_screen.dart';
import '../screens/profile/help_screen.dart';
import '../screens/interaction/interaction_screen.dart';
import '../screens/player/script_player_screen.dart';
// Private navigators
final _rootNavigatorKey = GlobalKey<NavigatorState>();
final _shellNavigatorDiscoveryKey = GlobalKey<NavigatorState>(debugLabel: 'shellDiscovery');
final _shellNavigatorLibraryKey = GlobalKey<NavigatorState>(debugLabel: 'shellLibrary');
final _shellNavigatorControlKey = GlobalKey<NavigatorState>(debugLabel: 'shellControl');
final _shellNavigatorProfileKey = GlobalKey<NavigatorState>(debugLabel: 'shellProfile');
final appRouter = GoRouter(
navigatorKey: _rootNavigatorKey,
initialLocation: '/discovery',
routes: [
// Top-level route for Interaction to cover BottomNav
GoRoute(
path: '/interaction/:characterId',
parentNavigatorKey: _rootNavigatorKey,
builder: (context, state) {
final characterId = state.pathParameters['characterId']!;
return InteractionScreen(characterId: characterId);
},
),
// Top-level route for Script Player to cover BottomNav
GoRoute(
path: '/player/:scenarioId',
parentNavigatorKey: _rootNavigatorKey,
builder: (context, state) {
final scenarioId = state.pathParameters['scenarioId']!;
return ScriptPlayerScreen(scenarioId: scenarioId);
},
),
// Top-level route for Free Control to cover BottomNav
GoRoute(
path: '/control/free',
parentNavigatorKey: _rootNavigatorKey,
builder: (context, state) => const FreeControlScreen(),
),
// Top-level route for Pattern Control to cover BottomNav
GoRoute(
path: '/control/pattern',
parentNavigatorKey: _rootNavigatorKey,
builder: (context, state) => const PatternControlScreen(),
),
// Profile sub-pages
GoRoute(
path: '/profile/settings',
parentNavigatorKey: _rootNavigatorKey,
builder: (context, state) => const SettingsScreen(),
),
GoRoute(
path: '/profile/topup',
parentNavigatorKey: _rootNavigatorKey,
builder: (context, state) => const TopupScreen(),
),
GoRoute(
path: '/profile/device',
parentNavigatorKey: _rootNavigatorKey,
builder: (context, state) => const DeviceManagerScreen(),
),
GoRoute(
path: '/profile/subscription',
parentNavigatorKey: _rootNavigatorKey,
builder: (context, state) => const SubscriptionScreen(),
),
GoRoute(
path: '/profile/privacy',
parentNavigatorKey: _rootNavigatorKey,
builder: (context, state) => const PrivacyScreen(),
),
GoRoute(
path: '/profile/help',
parentNavigatorKey: _rootNavigatorKey,
builder: (context, state) => const HelpScreen(),
),
StatefulShellRoute.indexedStack(
builder: (context, state, navigationShell) {
return MainScreen(navigationShell: navigationShell);
},
branches: [
StatefulShellBranch(
navigatorKey: _shellNavigatorDiscoveryKey,
routes: [
GoRoute(
path: '/discovery',
builder: (context, state) => const DiscoveryScreen(),
),
],
),
StatefulShellBranch(
navigatorKey: _shellNavigatorLibraryKey,
routes: [
GoRoute(
path: '/library',
builder: (context, state) => const LibraryScreen(),
),
],
),
StatefulShellBranch(
navigatorKey: _shellNavigatorControlKey,
routes: [
GoRoute(
path: '/control',
builder: (context, state) => const ControlScreen(),
),
],
),
StatefulShellBranch(
navigatorKey: _shellNavigatorProfileKey,
routes: [
GoRoute(
path: '/profile',
builder: (context, state) => const ProfileScreen(),
),
],
),
],
),
],
);