import 'dart:io' as io; import 'package:eatvio_app/core/env_config.dart'; import 'package:eatvio_app/core/locator_service.dart' as di; import 'package:eatvio_app/firebase_options.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_native_splash/flutter_native_splash.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:appmetrica_plugin/appmetrica_plugin.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; /// Класс для инициализации приложения class AppInitializer { /// Инициализация всех сервисов приложения static Future initialize() async { await _initializeSentry(); await _initializeEnvironment(); await _initializeFirebase(); await _initializeDependencyInjection(); await _initializeDebugMode(); await _initializeAnalytics(); } /// Инициализация Sentry static Future _initializeSentry() async { final widgetsBinding = SentryWidgetsFlutterBinding.ensureInitialized(); FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding); } /// Загрузка переменных окружения static Future _initializeEnvironment() async { await dotenv.load(fileName: ".env"); } /// Инициализация Firebase static Future _initializeFirebase() async { await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); await FirebaseMessaging.instance.requestPermission(); } /// Инициализация системы внедрения зависимостей static Future _initializeDependencyInjection() async { await di.init(); } /// Настройка режима отладки static Future _initializeDebugMode() async { if (kDebugMode) { io.HttpClient.enableTimelineLogging = true; } } /// Инициализация аналитики static Future _initializeAnalytics() async { AppMetrica.activate(AppMetricaConfig(EnvConfig.appMetricaApiKey)); AppMetrica.reportEvent('Application started'); } /// Запуск приложения с Sentry static Future runAppWithSentry(VoidCallback appRunner) async { await SentryFlutter.init((options) { options.dsn = EnvConfig.sentryDsn; options.tracesSampleRate = 1.0; options.debug = false; }, appRunner: appRunner); } }