Files
tripz-llc/apps/driver/lib/app.dart
T

94 lines
3.0 KiB
Dart

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<AuthRepository>())..checkAuth(),
),
// Blocs for Phase 3 — provided from getIt (lazy singletons).
// They persist across navigation and are disposed manually at logout.
BlocProvider.value(value: getIt<DriverCubit>()..loadProfile()),
BlocProvider.value(
value: getIt<OffersBloc>()..add(const OffersStarted()),
),
BlocProvider.value(
value: getIt<DriverTripBloc>()..add(const DriverTripCheckActive()),
),
],
child: _AppListener(
child: Builder(
builder: (context) {
final settings = context.watch<SettingsCubit>();
final auth = context.read<AuthCubit>();
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<AuthCubit>();
auth.stream.listen((state) {
if (state.status == AuthStatus.authenticated) {
getIt<DriverFcmService>().init();
}
});
}
@override
Widget build(BuildContext context) => widget.child;
}