mirror of
https://github.com/smmarty/friflex_flutter_starter.git
synced 2025-12-22 17:40:45 +00:00
feat(update): добавить модуль управления Hard & Soft обновлений (#30)
1. Реализован интерфейс и репозитории для проверки обновлений. 2. Добавлены состояния и кубит для управления процессом обновления. 3. Созданы UI-компоненты для отображения информации об обновлениях. 4. Обновлен README.md с описанием нового модуля и его интеграции
This commit is contained in:
38
lib/features/update/domain/state/cubit/update_cubit.dart
Normal file
38
lib/features/update/domain/state/cubit/update_cubit.dart
Normal file
@@ -0,0 +1,38 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:friflex_starter/features/update/domain/entity/update_entity.dart';
|
||||
import 'package:friflex_starter/features/update/domain/repository/i_update_repository.dart';
|
||||
|
||||
part 'update_state.dart';
|
||||
|
||||
/// {@template UpdateCubit}
|
||||
/// Кубит для управления состояниями обновления приложения
|
||||
/// {@endtemplate}
|
||||
class UpdateCubit extends Cubit<UpdateState> {
|
||||
/// {@macro UpdateCubit}
|
||||
UpdateCubit(this._updatesRepository) : super(UpdateInitialState());
|
||||
|
||||
/// Репозиторий для проверки обновлений
|
||||
final IUpdateRepository _updatesRepository;
|
||||
|
||||
/// Метод для проверки доступности обновлений
|
||||
/// [versionCode] - текущий код версии приложения
|
||||
/// [platform] - платформа (например, 'android' или 'ios')
|
||||
Future<void> checkForUpdates({
|
||||
required String versionCode,
|
||||
required String platform,
|
||||
}) async {
|
||||
if (state is UpdateLoadingState) return;
|
||||
emit(UpdateLoadingState());
|
||||
try {
|
||||
final updateInfo = await _updatesRepository.checkForUpdates(
|
||||
versionCode: versionCode,
|
||||
platform: platform,
|
||||
);
|
||||
emit(UpdateSuccessState(updateInfo));
|
||||
} on Object catch (e, st) {
|
||||
emit(UpdateErrorState(e.toString()));
|
||||
addError(e, st);
|
||||
}
|
||||
}
|
||||
}
|
||||
56
lib/features/update/domain/state/cubit/update_state.dart
Normal file
56
lib/features/update/domain/state/cubit/update_state.dart
Normal file
@@ -0,0 +1,56 @@
|
||||
part of 'update_cubit.dart';
|
||||
|
||||
/// {@template UpdateState}
|
||||
/// Состояния для управления процессом обновления приложения
|
||||
/// {@endtemplate}
|
||||
sealed class UpdateState extends Equatable {
|
||||
/// {@macro UpdateState}
|
||||
const UpdateState();
|
||||
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
/// {@template UpdateInitialState}
|
||||
/// Состояние начальной инициализации
|
||||
/// {@endtemplate}
|
||||
final class UpdateInitialState extends UpdateState {
|
||||
/// {@macro UpdateInitialState}
|
||||
const UpdateInitialState();
|
||||
}
|
||||
|
||||
/// {@template UpdateLoadingState}
|
||||
/// Состояние загрузки информации об обновлении
|
||||
/// {@endtemplate}
|
||||
final class UpdateLoadingState extends UpdateState {
|
||||
/// {@macro UpdateLoadingState}
|
||||
const UpdateLoadingState();
|
||||
}
|
||||
|
||||
/// {@template UpdateSuccessState}
|
||||
/// Состояние успешного получения информации об обновлении
|
||||
/// {@endtemplate}
|
||||
final class UpdateSuccessState extends UpdateState {
|
||||
/// {@macro UpdateSuccessState}
|
||||
const UpdateSuccessState(this.updateInfo);
|
||||
|
||||
/// Информация об обновлении
|
||||
final UpdateEntity updateInfo;
|
||||
|
||||
@override
|
||||
List<Object?> get props => [updateInfo];
|
||||
}
|
||||
|
||||
/// {@template UpdateErrorState}
|
||||
/// Состояние ошибки при получении информации об обновлении
|
||||
/// {@endtemplate}
|
||||
final class UpdateErrorState extends UpdateState {
|
||||
/// {@macro UpdateErrorState}
|
||||
const UpdateErrorState(this.message);
|
||||
|
||||
/// Сообщение об ошибке в UI
|
||||
final String message;
|
||||
|
||||
@override
|
||||
List<Object> get props => [message];
|
||||
}
|
||||
Reference in New Issue
Block a user