mirror of
https://github.com/smmarty/friflex_flutter_starter.git
synced 2025-12-22 01:20:46 +00:00
* chore(pubspec,di): Обновить версии SDK и исправить использование AppEnv * chore(readme): Обновить версии Flutter и Dart, добавить новые библиотеки --------- Co-authored-by: petrovyuri <petrovyuri@example.com>
Модуль Hard/Soft Updates
Модуль для управления обновлениями приложения. Поддерживает мягкие (soft) и обязательные (hard) обновления.
Ключевые сущности и состояния
-
UpdateEntity: доменная сущность с данными об обновленииavailableVersion: доступная версияupdateUrl: ссылка на обновлениеupdateType: тип (soft|hard), см.UpdateTypewhatIsNew: описание изменений
-
UpdateType: перечисление типов обновленияUpdateType.softUpdateType.hardUpdateType.none
-
UpdateCubit: управление состоянием проверки обновлений- Состояния:
UpdateInitialState,UpdateLoadingState,UpdateSuccessState(UpdateEntity?),UpdateErrorState(message) - Метод:
checkForUpdates({required String versionCode, required String platform})
- Состояния:
Репозитории
-
IUpdateRepository: Интерфейс, описывающий методы для проверки обновлений.- Возвращает
Future<UpdateEntity>(не может бытьnull)
- Возвращает
-
UpdateRepository: заготовка для реальной интеграции (бэкенд/стор)- Реализуйте логику в
checkForUpdates
- Реализуйте логику в
-
UpdateMockRepository: мок-реализация для разработки/демо- Возвращает фиктивное обновление (по умолчанию soft)
UI
- Soft update —
SoftUpdateModal- BottomSheet с заголовком, списком изменений и кнопками: «Отложить» и «Обновить»
- Статический метод
showбезопасно не откроет модалку, еслиupdateEntity == null
Пример показа модального окна:
await SoftUpdateModal.show(
context,
updateEntity: updateEntity, // экземпляр UpdateEntity
onUpdate: () {
// TODO: переход в стор/браузер по updateEntity.updateUrl
},
);
- Hard update —
HardUpdateScreen- Блокирующий экран, информирует и не даёт продолжить без обновления
Роуты
UpdateRoutes.buildRoutes()— регистрирует экран hard-обновления по пути/update
Структура модуля
features/update/
├── data/
│ └── repository/
│ ├── update_repository.dart # реализация для интеграции
│ └── update_mock_repository.dart # мок-репозиторий
├── domain/
│ ├── entity/
│ │ └── update_entity.dart # доменная сущность
│ ├── repository/
│ │ └── i_update_repository.dart # контракт репозитория
│ └── state/
│ └── cubit/
│ ├── update_cubit.dart # кубит и логика
│ └── update_state.dart # состояния
├── presentation/
│ ├── components/
│ │ └── soft_modal_sheet.dart # модалка для soft-обновления
│ └── screens/
│ └── hard_update_screen.dart # экран для hard-обновления
├── update_type.dart # константы типов обновления
└── update_routes.dart # роут на hard-экран
Заметки по реализации
- Для продакшена реализуйте переход в магазин или браузер по
updateUrl - Для soft-обновления не блокируйте UX; для hard — перенаправляйте на блокирующий экран
- Возвращайте
nullиз репозитория, если обновлений нет