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

89 lines
2.7 KiB
Dart

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<AuthRepository>())..checkAuth(),
),
BlocProvider<TripBloc>(
create: (_) => TripBloc(
tripRepo: getIt(),
socket: getIt<TripSocketService>(),
)..add(const TripCheckActive()),
),
],
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',
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<FcmService>().init();
}
});
}
@override
Widget build(BuildContext context) => widget.child;
}