import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:driver/core/l10n/app_localizations.dart'; import 'core/di.dart'; import 'core/router.dart'; import 'core/design/theme.dart'; import 'features/auth/cubit/auth_cubit.dart'; import 'features/auth/data/auth_repository.dart'; import 'features/settings/cubit/settings_cubit.dart'; import 'features/auth/cubit/auth_state.dart'; import 'features/home/cubit/driver_cubit.dart'; import 'features/offers/bloc/offers_bloc.dart'; import 'features/trip/bloc/driver_trip_bloc.dart'; import 'features/trip/data/fcm_service.dart'; class TripzDriverApp extends StatelessWidget { const TripzDriverApp({super.key}); @override Widget build(BuildContext context) { return MultiBlocProvider( providers: [ BlocProvider( create: (_) => SettingsCubit(), ), BlocProvider( create: (_) => AuthCubit(getIt())..checkAuth(), ), // Blocs for Phase 3 — provided from getIt (lazy singletons). // They persist across navigation and are disposed manually at logout. BlocProvider.value(value: getIt()..loadProfile()), BlocProvider.value( value: getIt()..add(const OffersStarted()), ), BlocProvider.value( value: getIt()..add(const DriverTripCheckActive()), ), ], child: _AppListener( child: Builder( builder: (context) { final settings = context.watch(); final auth = context.read(); final router = buildRouter(auth); return MaterialApp.router( title: 'Tripz Driver', debugShowCheckedModeBanner: false, theme: buildTheme( brightness: Brightness.light, locale: settings.state.locale, ), darkTheme: buildTheme( brightness: Brightness.dark, locale: settings.state.locale, ), themeMode: settings.state.themeMode, locale: settings.state.locale, supportedLocales: AppLocalizations.supportedLocales, localizationsDelegates: AppLocalizations.localizationsDelegates, routerConfig: router, ); }, ), ), ); } } /// يستمع لتغيير حالة المصادقة ويُهيّئ FCM بعد تسجيل الدخول. class _AppListener extends StatefulWidget { final Widget child; const _AppListener({required this.child}); @override State<_AppListener> createState() => _AppListenerState(); } class _AppListenerState extends State<_AppListener> { @override void initState() { super.initState(); final auth = context.read(); auth.stream.listen((state) { if (state.status == AuthStatus.authenticated) { getIt().init(); } }); } @override Widget build(BuildContext context) => widget.child; }