89 lines
2.7 KiB
Dart
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;
|
|
}
|