feat(app): смена сервера API и очистка данных устройства при выходе

Адрес бэкенда хранится в shared_preferences и читается до runApp; switchApiBaseUrl сбрасывает токены и кэш старого сервера. Выход стирает refresh-токен и sqlite-кэш ответов. Экран настроек переделан под разделы.
This commit is contained in:
Dmitry
2026-09-19 22:14:14 +03:00
parent bfe74ca47c
commit a559d6de3e
17 changed files with 887 additions and 135 deletions
+14
View File
@@ -70,6 +70,20 @@
на паттерне `AsyncValueView`/`EmptyState` переводятся по этому же рецепту, независимо друг от
друга (можно параллельно, в отдельных worktree).
## Жизненный цикл
Кэш — это вся финансовая картина в открытом sqlite/IndexedDB, поэтому он живёт не дольше сеанса:
`AuthController` чистит его вместе с refresh-токеном при `logout()` и когда сервер ответил 401 на
refresh. Смена адреса API (`switchApiBaseUrl`) идёт через `logout()`, так что данные старого
сервера не показываются новому. Ошибка очистки не блокирует выход. TTL и лимита размера у кэша
по-прежнему нет.
## Адрес API
`apiBaseUrlProvider`: сохранённый в `shared_preferences` адрес (читается в `main()` до `runApp`),
иначе `--dart-define=API_BASE_URL`, иначе origin страницы (web) / `http://127.0.0.1:8000`.
Меняется в Настройках и на экране входа.
## Веб: sqlite3.wasm + drift_worker.js
Собранные ассеты лежат в `app/web/sqlite3.wasm` и `app/web/drift_worker.js`, закоммичены (как