Files
friflex_flutter_starter/lib/di/di_services.dart

72 lines
2.9 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:app_services/app_services.dart';
import 'package:friflex_starter/di/di_container.dart';
import 'package:friflex_starter/di/di_typedefs.dart';
import 'package:i_app_services/i_app_services.dart';
/// {@template di_services}
/// Класс для инициализации и управления сервисами приложения.
///
/// Отвечает за:
/// - Инициализацию сервисов для работы с путями
/// - Инициализацию сервисов для работы с защищенным хранилищем
/// - Уведомление о прогрессе инициализации
/// - Обработку ошибок инициализации сервисов
/// {@endtemplate}
final class DiServices {
/// {@macro di_services}
DiServices();
/// Сервис для работы с путями файловой системы
late final IPathProvider pathProvider;
/// Сервис для работы с защищенным локальным хранилищем
late final ISecureStorage secureStorage;
/// Сервис для работы с геолокацией
late final ILocationService locationService;
/// Метод для инициализации сервисов в приложении.
///
/// Принимает:
/// - [onProgress] - обратный вызов для уведомления о прогрессе инициализации
/// - [diContainer] - контейнер зависимостей с конфигурацией приложения
/// - [onError] - обратный вызов для обработки ошибок инициализации
///
/// Последовательность инициализации:
/// 1. Инициализация сервиса путей (AppPathProvider)
/// 2. Инициализация защищенного хранилища (AppSecureStorage)
void init({
required OnProgress onProgress,
required OnError onError,
required DiContainer diContainer,
}) {
try {
pathProvider = const AppPathProvider();
onProgress(AppPathProvider.name);
} on Object catch (error, stackTrace) {
onError('Ошибка инициализации ${IPathProvider.name}', error, stackTrace);
}
try {
secureStorage = AppSecureStorage(
secretKey: diContainer.appConfig.secretKey,
);
onProgress(AppSecureStorage.name);
} on Object catch (error, stackTrace) {
onError('Ошибка инициализации ${ISecureStorage.name}', error, stackTrace);
}
try {
locationService = const AppLocationService();
onProgress(AppLocationService.name);
} on Object catch (error, stackTrace) {
onError(
'Ошибка инициализации ${ILocationService.name}',
error,
stackTrace,
);
}
onProgress('Инициализация сервисов завершена!');
}
}