main function Null safety

void main()

Initialises providers and passes them to descendants of MyApp.

Implementation

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);

  FirebaseFirestore firestoreInstance = FirebaseFirestore.instance;
  FirebaseAuth authInstance = FirebaseAuth.instance;
  FirebaseMessaging messagingInstance = FirebaseMessaging.instance;

  final FirebaseLoginProvider loginProvider =
      FirebaseLoginProvider(authInstance: authInstance);
  loginProvider.init();

  final FirebaseRegisterProvider registerProvider =
      FirebaseRegisterProvider(authInstance: authInstance);
  final FirebaseScreensProvider screensProvider = FirebaseScreensProvider(
      authInstance: authInstance, firestoreInstance: firestoreInstance);
  final FirebasePreviewProvider previewProvider =
      FirebasePreviewProvider(firestoreInstance: firestoreInstance);
  final FirebaseScreenInfoProvider screenInfoProvider =
      FirebaseScreenInfoProvider(
          firestoreInstance: firestoreInstance, authInstance: authInstance);

  final FirebaseTemplatesProvider templatesProvider = FirebaseTemplatesProvider(
      firestoreInstance: firestoreInstance, authInstance: authInstance);

  final TokenUpdaterService tokenUpdater = TokenUpdaterService(
      authInstance: authInstance,
      messagingInstance: messagingInstance,
      firestoreInstance: firestoreInstance);
  await tokenUpdater.init();

  final NotificationService notificationService = NotificationService();
  await notificationService.init();

  final ThemeProvider themeProvider = ThemeProvider();
  await themeProvider.init();

  runApp(MultiProvider(
    providers: [
      ChangeNotifierProvider(create: (context) => loginProvider),
      ChangeNotifierProvider(create: (context) => registerProvider),
      ChangeNotifierProvider(create: (context) => screensProvider),
      ChangeNotifierProvider(create: (context) => previewProvider),
      ChangeNotifierProvider(create: (context) => templatesProvider),
      ChangeNotifierProvider(create: (context) => screenInfoProvider),
      ChangeNotifierProvider(create: (context) => themeProvider),
    ],
    child: const MyApp(),
  ));
}