mirror of
https://github.com/smmarty/friflex_flutter_starter.git
synced 2025-12-22 01:20:46 +00:00
* fix(di): улучшить обработку ошибок при инициализации репозиториев * fix(di): улучшить обработку ошибок при инициализации репозиториев и сервисов --------- Co-authored-by: petrovyuri <petrovyuri@example.com>
73 lines
3.1 KiB
Dart
73 lines
3.1 KiB
Dart
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 {
|
||
// throw Exception('Тестовая - ошибка инициализации сервиса путей');
|
||
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('Инициализация сервисов завершена!');
|
||
}
|
||
}
|