import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'providers/device_provider.dart'; import 'providers/player_provider.dart'; import 'providers/wifi_provider.dart'; import 'screens/app_shell.dart'; import 'screens/ble_provision_screen.dart'; import 'screens/home_screen.dart'; import 'screens/network_screen.dart'; import 'screens/playback_screen.dart'; import 'screens/settings_screen.dart'; import 'screens/trigger_screen.dart'; import 'services/http_api_service.dart'; import 'services/web_socket_service.dart'; import 'theme/app_theme.dart'; void main() { final httpApiService = HttpApiService(baseUrl: 'http://127.0.0.1:8080'); final webSocketService = WebSocketService(); runApp( MultiProvider( providers: [ ChangeNotifierProvider( create: (_) => DeviceProvider( httpApiService: httpApiService, webSocketService: webSocketService, )..initialize(), ), ChangeNotifierProvider( create: (_) => PlayerProvider( httpApiService: httpApiService, webSocketService: webSocketService, ) ..bootstrap(), ), ChangeNotifierProvider( create: (_) => WifiProvider( httpApiService: httpApiService, webSocketService: webSocketService, ) ..bootstrap(), ), ], child: const ShowenApp(), ), ); } final GoRouter _router = GoRouter( initialLocation: '/', routes: [ StatefulShellRoute.indexedStack( builder: (context, state, navigationShell) => AppShell(navigationShell: navigationShell), branches: [ StatefulShellBranch( routes: [ GoRoute( path: '/', name: 'home', builder: (context, state) => const HomeScreen(), ), ], ), StatefulShellBranch( routes: [ GoRoute( path: '/playback', name: 'playback', builder: (context, state) => const PlaybackScreen(), ), ], ), StatefulShellBranch( routes: [ GoRoute( path: '/trigger', name: 'trigger', builder: (context, state) => const TriggerScreen(), ), ], ), StatefulShellBranch( routes: [ GoRoute( path: '/network', name: 'network', builder: (context, state) => const NetworkScreen(), routes: [ GoRoute( path: 'ble-provision', name: 'ble-provision', builder: (context, state) => const BleProvisionScreen(), ), ], ), ], ), StatefulShellBranch( routes: [ GoRoute( path: '/settings', name: 'settings', builder: (context, state) => const SettingsScreen(), ), ], ), ], ), ], ); class ShowenApp extends StatelessWidget { const ShowenApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp.router( title: 'ShowenV2', debugShowCheckedModeBanner: false, themeMode: ThemeMode.dark, darkTheme: AppTheme.dark(), theme: AppTheme.dark(), routerConfig: _router, ); } }