feat: polish phase 7 forms and schedules

This commit is contained in:
Artem Kokos
2026-05-01 09:47:08 +07:00
parent 91a494adf5
commit 2fa89f6be0
9 changed files with 1583 additions and 599 deletions

View File

@@ -5,7 +5,7 @@
## Возможности
- **Мульти-дом** -- поддержка нескольких серверов Ignis (квартира, дача, друзья). Каждый дом -- отдельный сервер со своим URL и API-ключом.
- **Группы ламп** -- создание, удаление, управление. При создании группы можно выбрать нужные лампы из списка обнаруженных устройств, пересканировать сеть.
- **Группы ламп** -- создание, удаление и управление. При создании группы есть product-валидация, автогенерация `ID`, предупреждение о конфликтах по устройствам и более честный перескан сети.
- **Управление освещением:**
- Включение/выключение
- Яркость 10--100% с шагом 10%
@@ -13,10 +13,10 @@
- RGB-цвет через HSV-пикер
- Сцены (загружаются с сервера, отображаются с человекочитаемыми названиями)
- Таймер "включить на 4 часа"
- **Расписания** -- одноразовые таймеры и cron-задачи с выбором дней недели. Просмотр и отмена активных задач.
- **API-ключи** -- просмотр, создание, отзыв и повторная активация гостевых ключей для администраторов.
- **Расписания** -- одноразовые таймеры с выбором даты/времени и повторяющиеся задачи с выбором дней недели. Просмотр, создание, валидация и отмена активных задач.
- **API-ключи** -- просмотр, создание, отзыв и повторная активация гостевых ключей для администраторов с отдельным UX для только что созданного ключа.
- **Статистика и лог событий** -- просмотр сводки по группам и последних событий сервера.
- **Геофенс** -- опциональное автовыключение света при уходе от дома.
- **Геофенс и расстояния** -- live-дистанция до дома в UI и опциональное автовыключение света при уходе. Геофенс работает для текущего активного дома, показывает диагностический статус и использует cooldown/re-arm поведение.
- **Устойчивость к ошибкам** -- гранулярные состояния загрузки (`LoadState`), централизованная обработка сетевых сбоев, soft-ошибки при управлении ползунками без спама в UI.
## Стек
@@ -58,22 +58,23 @@ lib/
├── features/
│ ├── api_keys/providers/ -- управление гостевыми API-ключами
│ ├── auth/providers/ -- auth/me и auth-state
│ ├── homes/ -- дома, геолокация, geofence sync
│ ├── groups/ -- валидация и логика форм групп
│ ├── homes/ -- дома, геолокация, geofence sync/runtime
│ ├── remote/providers/ -- polling групп, устройства, сцены, control errors
│ ├── schedules/providers/ -- задачи расписания
│ ├── schedules/ -- логика и providers расписаний
│ ├── shared/providers/ -- базовые core providers
│ └── stats/providers/ -- статистика и лог событий
├── providers/
│ └── providers.dart -- compatibility barrel для публичных provider-экспортов
├── screens/
│ ├── api_keys_screen.dart
│ ├── event_log_screen.dart
│ ├── homes_screen.dart
│ ├── home_edit_screen.dart
│ ├── remote_screen.dart
│ ├── group_edit_screen.dart
│ ├── schedules_screen.dart
│ └── stats_screen.dart
│ ├── api_keys_screen.dart -- экран гостевых API-ключей
│ ├── event_log_screen.dart -- последние события сервера
│ ├── homes_screen.dart -- список домов, distance/geofence статус
│ ├── home_edit_screen.dart -- создание и редактирование дома
│ ├── remote_screen.dart -- основной экран управления светом
│ ├── group_edit_screen.dart -- создание группы с выбором устройств
│ ├── schedules_screen.dart -- создание и просмотр расписаний
│ └── stats_screen.dart -- статистика по командам
└── widgets/
├── build_info_text.dart -- лейбл с версией сборки
├── group_card.dart
@@ -107,10 +108,17 @@ flutter test
Текущий baseline зелёный: `flutter analyze`, `flutter test` и release APK сборка проходят штатно.
Дополнительно тестами уже прикрыты:
- typed parsing/load-state для основных backend-ответов;
- geofence distance/runtime логика;
- чистая логика форм расписаний и групп.
## Настройка
При первом запуске приложение попросит добавить "дом" -- указать адрес сервера Ignis и API-ключ. После этого откроется пульт управления группами.
Если задать координаты дома, экран домов начнёт показывать расстояние до активного дома. Если дополнительно включить автовыключение при уходе и выдать Android фоновые разрешения на геолокацию и уведомления, приложение сможет в фоне выключать свет при удалении от текущего активного дома.
Для добавления второго дома: кнопка "домик" в левом верхнем углу пульта -> экран домов -> кнопка "+".
API-ключи хранятся отдельно от конфигурации домов в `flutter_secure_storage`. Старые ключи из `SharedPreferences` мигрируются автоматически.
@@ -125,7 +133,7 @@ API-ключи хранятся отдельно от конфигурации
- Целевая платформа сейчас Android.
- Release APK пока подписывается debug-ключом из Flutter-шаблона.
- Геофенс всё ещё требует отдельной продуктовой и технической доводки: multi-home semantics, background permissions и retry/cooldown поведение пока не доведены до конца.
- Build info в APK показывает дату сборки и короткий git hash текущего `HEAD`. Если сборка делается поверх незакоммиченного рабочего дерева, hash будет от последнего коммита, а не от локальных незакоммиченных изменений.
## Лицензия