import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '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/cubit/auth_state.dart'; import 'features/auth/data/auth_repository.dart'; import 'features/settings/cubit/settings_cubit.dart'; import 'features/trip/bloc/trip_bloc.dart'; import 'features/trip/bloc/trip_event.dart'; import 'features/trip/data/trip_socket_service.dart'; import 'features/trip/data/fcm_service.dart'; class TripzApp extends StatelessWidget { const TripzApp({super.key}); @override Widget build(BuildContext context) { return MultiBlocProvider( providers: [ BlocProvider(create: (_) => SettingsCubit()), BlocProvider( create: (_) => AuthCubit(getIt())..checkAuth(), ), BlocProvider( create: (_) => TripBloc( tripRepo: getIt(), socket: getIt(), )..add(const TripCheckActive()), ), ], child: _AppListener( child: Builder( builder: (context) { final settings = context.watch(); final auth = context.read(); final router = buildRouter(auth); return MaterialApp.router( title: 'Tripz', 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; }