import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flux/core/blocs/session/session_bloc.dart'; import 'package:flux/core/routes/app_router.dart'; import 'package:flux/core/theme/theme.dart'; import 'package:flux/core/theme/bloc/theme_bloc.dart'; import 'package:flux/features/auth/bloc/auth_bloc.dart'; import 'package:flux/features/company/bloc/company_bloc.dart'; import 'package:flux/features/company/data/company_repository.dart'; import 'package:flux/features/customers/blocs/customer_bloc.dart'; import 'package:flux/features/customers/data/customer_repository.dart'; import 'package:flux/features/store/bloc/store_bloc.dart'; import 'package:flux/features/store/data/store_repository.dart'; import 'package:flux/features/settings/settings.dart'; import 'package:get_it/get_it.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await setupLocator(); runApp( MultiBlocProvider( providers: [ BlocProvider( create: (context) => ThemeBloc()..add(LoadThemeEvent()), ), BlocProvider( create: (context) => SessionBloc()..add(AppStarted()), ), BlocProvider(create: (context) => AuthBloc()), BlocProvider(create: (context) => CompanyBloc()), BlocProvider(create: (context) => StoreBloc()), BlocProvider(create: (context) => CustomerBloc()), ], child: const FluxApp(), ), ); } Future setupLocator() async { final GetIt getIt = GetIt.instance; getIt.registerSingleton( await SharedPreferences.getInstance(), ); await Supabase.initialize( url: 'https://pvqpjloswwvtfoxbkfbh.supabase.co', anonKey: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InB2cXBqbG9zd3d2dGZveGJrZmJoIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzQ5MjkyNjgsImV4cCI6MjA5MDUwNTI2OH0.-7nitlX1pzPGscGawlIF0vhwuD_w209FUU0PxDNGm0Y', ); getIt.registerSingleton(Supabase.instance.client); getIt.registerLazySingleton(() => AppSettings()); getIt.registerLazySingleton(() => CompanyRepository()); getIt.registerLazySingleton(() => StoreRepository()); getIt.registerLazySingleton(() => CustomerRepository()); } class FluxApp extends StatelessWidget { const FluxApp({super.key}); @override Widget build(BuildContext context) { return BlocBuilder( builder: (context, state) { // Creiamo il router passando il SessionBloc che è già nell'albero grazie al MultiBlocProvider final router = AppRouter.createRouter(context.read()); return BlocBuilder( builder: (context, state) { return MaterialApp.router( // <--- Diventa .router title: 'FLUX Gestionale', debugShowCheckedModeBanner: false, theme: fluxLightTheme, darkTheme: fluxDarkTheme, themeMode: state.currentTheme.themeMode, routerConfig: router, // <--- Configurazione GoRouter ); }, ); }, ); } }