import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; // Dependency Injection import '../../../injections_container.dart'; // BLOC import '../../features/database/bloc/device/device_bloc.dart'; import '../../features/database/bloc/device_schedule/device_schedule_bloc.dart'; import '../../features/database/bloc/mesh_network/mesh_network_bloc.dart'; import '../../features/mqtt/bloc/mqtt_bloc.dart'; // Pages import '../../presentation/pages/developer_mode/developer_mode_page.dart'; import '../../presentation/pages/device_dashboard/device_dashboard.dart'; import '../../presentation/pages/device_provisioning/device_provisioning_page.dart'; import '../../presentation/pages/main_bnb/main_bnb_page.dart'; import '../../presentation/pages/splash/splash_screen.dart'; import '../../presentation/pages/view_devices/view_devices_page.dart'; // Arguments import '../arguments/device_arguments.dart'; import '../arguments/devices_arguments.dart'; class AppRoutes { static Route onGenerateRoutes(RouteSettings settings) { switch (settings.name) { // Splash Screen case '/': return _materialRoute(const SplashScreen()); // Home Section (Home Page and Setting Page) case '/MainBNB': final context = settings.arguments as BuildContext; return _materialRoute( MultiBlocProvider( providers: [ BlocProvider.value( value: BlocProvider.of(context) ..add( ProcessDeviceMessage(), ), ), BlocProvider.value( value: sl() ..add( GetMeshNetworks(), ), ), BlocProvider.value( value: sl() ..add( GetDevices(), ), ), BlocProvider.value( value: sl(), ), ], child: const MainBNBPage(), ), ); // Provisioning case '/DeviceProvisioning': final context = settings.arguments as BuildContext; return _materialRoute( MultiBlocProvider( providers: [ BlocProvider.value( value: BlocProvider.of(context), ), BlocProvider.value( value: BlocProvider.of(context), ), BlocProvider.value( value: BlocProvider.of(context), ), ], child: const DeviceProvisioningPage(), ), ); // Dashboard Details case '/DeviceDashboard': final args = settings.arguments as DeviceArguments; return _materialRoute( MultiBlocProvider( providers: [ BlocProvider.value( value: BlocProvider.of(args.context), ), BlocProvider.value( value: BlocProvider.of(args.context), ), BlocProvider.value( value: BlocProvider.of(args.context), ), BlocProvider.value( value: BlocProvider.of(args.context) ..add( GetDeviceSchedulesByDeviceId(deviceId: args.device.id!), ), ), ], child: DeviceDashboardPage( device: args.device, currentStatus: args.currentStatus, currentOnline: args.currentOnline, currentRSSI: args.currentRSSI, ), ), ); // Setting View All Devices case '/ViewDevicesChart': final args = settings.arguments as DevicesArguments; return _materialRoute( MultiBlocProvider( providers: [ BlocProvider.value( value: BlocProvider.of(args.context), ), ], child: ViewDevicesPage( devices: args.devices, ), ), ); // Developer Mode (Change MQTT Broker) case '/DeveloperMode': final context = settings.arguments as BuildContext; return _materialRoute( MultiBlocProvider( providers: [ BlocProvider.value( value: BlocProvider.of(context), ), ], child: const DeveloperSettingsPage(), ), ); default: return _materialRoute(const SplashScreen()); } } static MaterialPageRoute _materialRoute(Widget page) { return MaterialPageRoute(builder: (context) => page); } }