import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:logging/logging.dart'; import 'package:provider/provider.dart'; import 'package:result_monad/result_monad.dart'; import 'globals.dart'; import 'models/TimelineIdentifiers.dart'; import 'routes.dart'; import 'services/auth_service.dart'; import 'services/connections_manager.dart'; import 'services/entry_manager_service.dart'; import 'services/notifications_manager.dart'; import 'services/secrets_service.dart'; import 'services/timeline_manager.dart'; import 'utils/app_scrolling_behavior.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await dotenv.load(fileName: '.env'); final inDevMode = dotenv.env['USE_DEV_MODE'] == 'true' ? true : false; if (inDevMode) { print('In Dev Mode'); SecurityContext.defaultContext.setTrustedCertificates( '/etc/apache2/certificate/apache-certificate.crt'); } else { print('In Regular Mode'); } Logger.root.level = Level.ALL; Logger.root.onRecord.listen((event) { final logName = event.loggerName.isEmpty ? 'ROOT' : event.loggerName; final msg = '${event.level.name} - $logName @ ${event.time}: ${event.message}'; print(msg); }); final authService = AuthService(); final secretsService = SecretsService(); final entryManagerService = EntryManagerService(); final timelineManager = TimelineManager(); getIt.registerLazySingleton(() => ConnectionsManager()); getIt.registerSingleton(entryManagerService); getIt.registerSingleton(secretsService); getIt.registerSingleton(authService); getIt.registerSingleton(timelineManager); getIt.registerLazySingleton( () => NotificationsManager()); await secretsService.initialize().andThenSuccessAsync((credentials) async { if (credentials.isEmpty) { return; } final wasLoggedIn = await authService.getStoredLoginState(); if (wasLoggedIn) { final result = await authService.signIn(credentials); print('Startup login result: $result'); if (result.isSuccess) { print('Getting timeline for ${result.value.credentials.handle}'); timelineManager.getTimeline(TimelineIdentifiers.home()); } } else { print('Was not logged in'); } }); runApp(const App()); } class App extends StatelessWidget { const App({super.key}); // This widget is the root of your application. @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider( create: (_) => getIt(), lazy: true, ), ChangeNotifierProvider( create: (_) => getIt(), lazy: true, ), ChangeNotifierProvider( create: (_) => getIt(), ), ChangeNotifierProvider( create: (_) => getIt(), ), ], child: MaterialApp.router( theme: ThemeData( primarySwatch: Colors.indigo, ), debugShowCheckedModeBanner: false, scrollBehavior: AppScrollingBehavior(), routerDelegate: appRouter.routerDelegate, routeInformationProvider: appRouter.routeInformationProvider, routeInformationParser: appRouter.routeInformationParser, ), ); } }