import 'package:flutter/material.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:logging/logging.dart'; import 'package:multi_trigger_autocomplete/multi_trigger_autocomplete.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/gallery_service.dart'; import 'services/hashtag_service.dart'; import 'services/media_upload_attachment_helper.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'); Logger.root.level = Level.FINER; // 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(); final galleryService = GalleryService(); getIt.registerLazySingleton(() => ConnectionsManager()); getIt.registerLazySingleton(() => HashtagService()); getIt.registerSingleton(galleryService); getIt.registerSingleton(entryManagerService); getIt.registerSingleton(secretsService); getIt.registerSingleton(authService); getIt.registerSingleton(timelineManager); getIt.registerLazySingleton( () => MediaUploadAttachmentHelper()); getIt.registerLazySingleton( () => NotificationsManager()); galleryService.getGalleries(); 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.updateTimeline( TimelineIdentifiers.home(), TimelineRefreshType.loadOlder); } } 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 Portal( child: MultiProvider( providers: [ ChangeNotifierProvider( create: (_) => getIt(), lazy: true, ), ChangeNotifierProvider( create: (_) => getIt(), lazy: true, ), ChangeNotifierProvider( create: (_) => getIt(), lazy: true, ), 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, ), ), ); } }