import 'package:wanisdriver/Provider/CarypeProvider.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:get_it/get_it.dart'; import 'package:provider/provider.dart'; import 'package:provider/single_child_widget.dart'; import '../Provider/CityProvider.dart'; import '../Provider/ConnectionStatusProvider.dart'; import '../Provider/ContactUsProvider.dart'; import '../Provider/RideOptionProvider.dart'; import '../Provider/RideProvider.dart'; import '../Provider/RideRequestProvider.dart'; import '../Provider/RideStatusProvider.dart'; import '../Provider/SelectedRideProvider.dart'; import '../Provider/SignUp_provider.dart'; import '../Provider/TabProvider.dart'; import '../Provider/TaxiOptionProvider.dart'; import '../Provider/TermConditionprovider.dart'; import '../Provider/ThemeProvider.dart'; import '../Provider/authentification_provider.dart'; import '../Provider/driver_provider.dart'; import '../Provider/language_provider.dart'; import '../Provider/notification_provider.dart'; import '../Provider/passwordProvider.dart'; import '../Provider/public_provider.dart'; import '../Provider/sms_provider.dart'; import '../Provider/utils_provider.dart'; import '../Provider/utils_singleton.dart'; import '../services/AppBackgroundServices.dart'; import '../services/DriverServices.dart'; import '../Provider/RideNotification.dart'; import '../services/PubNubDriverManager.dart'; import '../services/RideNotificationHelper.dart'; import '../services/RideServices.dart'; import '../services/agora_service.dart'; import '../services/agouranotificationservice.dart'; import '../services/audio_service.dart'; import '../services/auth_services.dart'; import '../services/notificaitons_services.dart'; import '../services/public_keys_service.dart'; import '../services/public_service.dart'; import '../services/push_notification_service.dart'; import '../services/ride_socket_service_manager.dart'; import '../services/sms_services.dart'; import '../services/utils_services.dart'; // ✅ Create a single, global GetIt instance for easy access final getIt = GetIt.instance; class DependencyInjector { /// This function sets up the GetIt service locator. static Future setup() async { // Services that perform actions getIt.registerLazySingleton(() => AuthServices()); getIt.registerLazySingleton(() => RideService()); getIt.registerLazySingleton(() => UtilsServices()); getIt.registerLazySingleton(() => driverservice()); GetIt.I.registerLazySingleton(() => PublicService()); getIt.registerLazySingleton(() => AppBackgroundServices()); // Notification-related services getIt.registerLazySingleton(() => FlutterLocalNotificationsPlugin()); getIt.registerLazySingleton(() => PushNotificationService()); getIt.registerLazySingleton(() => RideNotificationService()); GetIt.I.registerLazySingleton(() => AgoraNotificationService()); GetIt.I.registerLazySingleton(() => AgoraService()); GetIt.I.registerLazySingleton(() => SmsServices()); // Other singleton services getIt.registerLazySingleton(() => RideSocketServiceManager()); getIt.registerLazySingleton(() => AudioService()); getIt.registerLazySingleton(() => NotificationService()); GetIt.I.registerLazySingleton(() => PublicKeysService()); } /// This list provides ChangeNotifier states to the widget tree. static List get providers => [ // --- SERVICES PROVIDED AS NOTIFIERS --- // Provides the single instance of RideNotificationService from GetIt ChangeNotifierProvider( create: (context) => PublicProvider()), ChangeNotifierProvider( create: (_) => getIt(), ), ChangeNotifierProvider( create: (context) => PublicProvider()), // --- UI STATE PROVIDERS --- ChangeNotifierProvider( create: (_) => ConnectionStatusProvider()), ChangeNotifierProvider(create: (_) => LanguageProvider()), ChangeNotifierProvider( create: (_) => DriverPubNubManager()), ChangeNotifierProvider( create: (_) => RideStatusProvider()), ChangeNotifierProvider( create: (_) => RideRequestProvider()), ChangeNotifierProvider(create: (_) => DriverProvider()), ChangeNotifierProvider(create: (_) => SmsProvider()), ChangeNotifierProvider(create: (_) => RideNotification()), ChangeNotifierProvider( create: (_) => SelectedRideProvider()), ChangeNotifierProvider(create: (_) => AuthProvider()), ChangeNotifierProvider(create: (_) => UtilsProvider()), ChangeNotifierProvider( create: (_) => NotificationProvider()), ChangeNotifierProvider(create: (_) => SignUpProvider()), ChangeNotifierProvider(create: (_) => CityProvider()), ChangeNotifierProvider( create: (_) => TaxiOptionProvider()), ChangeNotifierProvider( create: (_) => RideOptionProvider()), ChangeNotifierProvider(create: (_) => CarTypeProvider()), ChangeNotifierProvider(create: (_) => ContactProvider()), ChangeNotifierProvider( create: (_) => TermConditionprovider()), ChangeNotifierProvider(create: (_) => PasswordProvider()), ChangeNotifierProvider(create: (_) => ThemeProvider()), ChangeNotifierProvider(create: (_) => TabProvider()), ChangeNotifierProvider(create: (_) => Utils()), // This provider depends on others and is set up correctly ChangeNotifierProxyProvider2( create: (_) => RideProvider(), update: (_, rideStatus, rideNotif, rideProv) => (rideProv ?? RideProvider())..bindDeps(rideStatus, rideNotif), ), ]; }