Aidra Connect 10.0.2+16
Aidra Connect Mobile Application
Loading...
Searching...
No Matches
main.dart
Go to the documentation of this file.
1import 'dart:io';
2import 'package:connect/core/localization/language_cubit.dart';
3import 'package:connect/core/services/notification_service.dart';
4import 'package:connect/features/account/screens/cubit/document_cubit/document_cubit.dart';
5import 'package:connect/features/account/screens/cubit/profile_cubit/load_profile_cubit_cubit.dart';
6import 'package:connect/features/elearning_v2/presentation/logic/cubit/elearning_v2_cubit.dart';
7import 'package:firebase_core/firebase_core.dart';
8import 'package:flutter/material.dart';
9import 'package:flutter/services.dart';
10import 'package:flutter_bloc/flutter_bloc.dart';
11import 'package:flutter_native_splash/flutter_native_splash.dart';
12
13import 'package:connect/app_view.dart';
14import 'package:flutter_screenutil/flutter_screenutil.dart';
15
16import 'core/router/router.dart';
17import '/core/router/auth_notifier.dart';
18import 'core/services/service_locator.dart' as servicelocator;
19import 'core/services/service_locator.dart';
20import 'core/utils/http_overriders.dart';
21
22import '/features/collections/presentation/logic/collection_requests_history_bloc/collection_requests_history_bloc.dart';
23import '/features/elearning/presentation/logic/cubit/elearning_cubit.dart';
24import '/features/main_menu/presentation/logic/cubit/banners_cubit.dart';
25import '/features/notifications/presentation/logic/notifications_cubit/notifications_cubit.dart';
26import '/features/collections/presentation/logic/create_collection_cubit/create_collection_cubit.dart';
27import '/features/collections/presentation/logic/update_collection_cubit/update_collection_cubit.dart';
28import 'features/authentication/presentation/logic/authentication_bloc/authentication_bloc.dart';
29import 'features/dashboard/presentation/logic/dashboard_cubit/dashboard_cubit.dart';
30import 'features/environmental_dashboard/presentation/logic/cubit/environmental_dashboar_cubit.dart';
31import 'features/collections/presentation/logic/proposed_times_cubit/proposed_times_cubit.dart';
32import 'features/settings/presentation/logic/faq_cubit/faq_cubit.dart';
33import 'features/settings/presentation/logic/theme_cubit/theme_cubit.dart';
34import 'package:flutter_dotenv/flutter_dotenv.dart';
35
36const String devEnvironment = 'dev';
37const String testEnvironment = 'test';
38
39// Set the current environment - this will be overridden by --dart-define
40const String environment =
41 String.fromEnvironment('ENVIRONMENT', defaultValue: devEnvironment);
42
43Future<void> main() async {
44 await _initializeApp();
45 await ScreenUtil.ensureScreenSize();
46 runApp(App());
47}
48
49Future<void> _initializeApp() async {
50 final widgetsBinding = WidgetsFlutterBinding.ensureInitialized();
51 await dotenv.load(fileName: ".env");
52 await dotenv.load(
53 fileName: environment == testEnvironment ? ".env.test" : ".env.dev",
54 mergeWith: dotenv.env,
55 );
56
58 await _configureSplashScreen(widgetsBinding);
59 await servicelocator.init();
60
61 // Initialize Firebase
62 await Firebase.initializeApp();
63
64 // Initialize Notification Service with navigator key
65 final notificationService = NotificationService();
66 await notificationService.init();
67}
68
69Future<void> _configureSystemSettings() async {
70 HttpOverrides.global = MyHttpOverrides();
71 await SystemChrome.setPreferredOrientations([
72 DeviceOrientation.portraitUp,
73 DeviceOrientation.portraitDown,
74 ]);
75}
76
77Future<void> _configureSplashScreen(WidgetsBinding widgetsBinding) async {
78 FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding);
79 FlutterNativeSplash.remove();
80}
81
82class App extends StatelessWidget {
83 App({super.key}) {
85 }
86
87 late final AuthenticationBloc _authBloc;
88 late final AuthNotifier _authNotifier;
89 late final RouterConfig<Object> _routerConfig;
90
92 _authBloc = AuthenticationBloc();
93 _authNotifier = AuthNotifier(_authBloc);
95 }
96
97 @override
98 Widget build(BuildContext context) {
99 return MultiBlocProvider(
100 providers: _createBlocProviders(),
102 );
103 }
104
105 List<BlocProvider> _createBlocProviders() {
106 return [
107 BlocProvider<ThemeModeBloc>(
108 create: (_) => sl<ThemeModeBloc>()
109 ..add(
110 LoadThemeMode(),
111 ),
112 ),
113 BlocProvider<AuthenticationBloc>(
114 create: (_) => _authBloc
115 ..add(
116 LoadSessionEvent(),
117 ),
118 ),
119 BlocProvider<DashboardCubit>(
120 create: (_) => sl<DashboardCubit>(),
121 ),
122 BlocProvider<EnvironmentalDashboarCubit>(
123 create: (_) => sl<EnvironmentalDashboarCubit>(),
124 ),
125 BlocProvider<ProposedTimesCubit>(
126 create: (_) => sl<ProposedTimesCubit>(),
127 ),
128 BlocProvider<CreateCollectionCubit>(
129 create: (_) => sl<CreateCollectionCubit>(),
130 ),
131 BlocProvider<UpdateCollectionCubit>(
132 create: (_) => sl<UpdateCollectionCubit>(),
133 ),
134 BlocProvider<CollectionRequestsHistoryBloc>(
135 create: (_) => sl<CollectionRequestsHistoryBloc>(),
136 ),
137 BlocProvider<NotificationsCubit>(
138 create: (_) => sl<NotificationsCubit>(),
139 ),
140 BlocProvider<ElearningCubit>(
141 create: (_) => sl<ElearningCubit>(),
142 ),
143 BlocProvider<BannersCubit>(
144 create: (_) => sl<BannersCubit>(),
145 ),
146 BlocProvider<FaqCubit>(
147 create: (_) => sl<FaqCubit>(),
148 ),
149 BlocProvider<LoadProfileCubitCubit>(
150 create: (_) => sl<LoadProfileCubitCubit>(),
151 ),
152 BlocProvider<DocumentCubit>(
153 create: (_) => sl<DocumentCubit>(),
154 ),
155 BlocProvider<ElearningV2Cubit>(
156 create: (_) => sl<ElearningV2Cubit>(),
157 ),
158 BlocProvider<LanguageCubit>(
159 create: (context) => sl<LanguageCubit>(),
160 ),
161 ];
162 }
163}
App({super.key})
Definition main.dart:83
final RouterConfig< Object > routerConfig
Definition app_view.dart:16
List< BlocProvider > _createBlocProviders()
Definition main.dart:105
late final RouterConfig< Object > _routerConfig
Definition main.dart:89
final Widget child
void _initializeAuthComponents()
Definition main.dart:91
override Widget build(BuildContext context)
Definition main.dart:98
const AppView({super.key, required this.routerConfig})
late final AuthenticationBloc _authBloc
Definition main.dart:87
late final AuthNotifier _authNotifier
Definition main.dart:88
Future< void > main() async
Definition main.dart:43
Future< void > _configureSplashScreen(WidgetsBinding widgetsBinding) async
Definition main.dart:77
Future< void > _configureSystemSettings() async
Definition main.dart:69
const String testEnvironment
Definition main.dart:37
Future< void > _initializeApp() async
Definition main.dart:49
const String environment
Definition main.dart:40
const String devEnvironment
Definition main.dart:36
RouterConfig< Object > router(AuthNotifier authNotifier)
final sl