import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'core/constants/app_constants.dart'; import 'core/di/injection.dart'; import 'core/notifications/local_notification_service.dart'; import 'core/router/app_router.dart'; import 'core/startup/auth_session_bootstrapper.dart'; import 'core/theme/app_theme.dart'; import 'features/auth/presentation/bloc/auth_bloc.dart'; import 'features/auth/presentation/bloc/auth_event.dart'; import 'features/auth/presentation/bloc/auth_state.dart'; import 'features/calendar/data/services/calendar_service.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await configureDependencies(); await AppConstants.init(); final authBloc = sl(); authBloc.add(AuthStarted()); runApp( LinksyApp( authBloc: authBloc, sessionBootstrapper: AuthSessionBootstrapper( calendarService: sl(), notificationService: sl(), ), ), ); } class LinksyApp extends StatelessWidget { final AuthBloc authBloc; final AuthSessionBootstrapper sessionBootstrapper; const LinksyApp({ super.key, required this.authBloc, required this.sessionBootstrapper, }); @override Widget build(BuildContext context) { return BlocProvider.value( value: authBloc, child: BlocListener( listenWhen: (previous, current) => previous != current, listener: (context, state) { unawaited(sessionBootstrapper.syncForAuthState(state)); }, child: MaterialApp.router( title: 'Linksy', debugShowCheckedModeBanner: false, theme: AppTheme.light, routerConfig: createAppRouter(authBloc), ), ), ); } }