// Dart imports: import 'dart:async'; // Flutter imports: import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:hive_ce/hive.dart'; import 'package:injectable/injectable.dart'; import 'package:remever/common/resources.dart'; import 'package:remever/components/notifiers/app_settings.dart'; import 'package:remever/components/notifiers/home_screen_data.dart'; import 'package:remever/helpers/hive_creator.dart'; import 'package:remever/i18n/strings.g.dart'; import 'package:remever/interfaces/warmup_service.dart'; import 'package:remever/models/adapters/app_locale_adapter.dart'; import 'package:remever/models/adapters/theme_mode_adapter.dart'; import '../inject.dart'; import 'core/enc_keys_service.dart'; import 'core/lang_service.dart'; import 'core/theme_service.dart'; /// /// Сервис прогрева приложения /// @Singleton() class WarmupService { WarmupService(this._themeService, this._langService, this._encKeysService); /// Сервисы final ThemeService _themeService; final LangService _langService; final EncKeysService _encKeysService; /// [Completer] для прогрева приложения final Completer _firstStartCompleter = Completer(); Completer get firstStartCompleter => _firstStartCompleter; @PostConstruct(preResolve: true) Future common() async { await _registerHiveAdapters(); await _openHiveBoxes(); await _registerNotifiers(); } /// /// Инициализация для запуска приложения /// Future firstStart() async { await _setStoragesValue(); } /// /// Проставнока изначальных значений хранилищ /// Future _setStoragesValue() async { final List services = [ _themeService, _langService, ]; for (final IWarmupService service in services) { await service.init(); } } /// /// Регистрация [Hive] адаптеров /// Future _registerHiveAdapters() async { Hive.registerAdapter(ThemeModeAdapter()); Hive.registerAdapter(AppLocaleAdapter()); } /// /// Открытие [Hive] хранилищ /// Future _openHiveBoxes() async { final Map> storageNames = >{ Storage.storageAuth: HiveCreator(), Storage.hiveThemeMode: HiveCreator(), Storage.hiveLang: HiveCreator(), }; for (MapEntry> storage in storageNames.entries) { final String name = storage.key; final Uint8List key = await _encKeysService.getKey(name); await storage.value.open(name, HiveAesCipher(key)); } } /// /// Регистрация нотификаторов /// Future _registerNotifiers() async { getIt.registerLazySingleton( () => AppSettingsNotifier(debugMode: kDebugMode), ); getIt.registerLazySingleton(() => CollectionData()); } }