Список есть. Обновление не удалось. Что показать на экране?

Каталог открылся из кэша. Пользователь уже видит товары, но фоновый запрос завершается ошибкой — и список исчезает. Вместо него остаётся «Не удалось загрузить данные».

Данные были. Не удалось получить более новые. Когда оба факта сводятся к одному состоянию error, интерфейс теряет полезное содержимое вместе с причиной сбоя. В новом разборе ArkTelos Lab — контракт репозитория, компонента, который согласует локальные данные и ответы сервера. Он отдельно сообщает, что уже можно показать, как прошло обновление и удалось ли сохранить результат на устройстве.

На небольшом Flutter-каталоге разобраны ситуации, которые легко потерять за обычным «успех или ошибка»: • Сеть недоступна: список остаётся вместе с предупреждением о неудачном обновлении. • Ответ получен, запись на диск не удалась: новые данные доступны в памяти, но их сохранность после перезапуска не обещается. • Кэш прочитан позже сети: старое значение не заменяет уже принятое новое. • Истёк допустимый возраст подтверждения — TTL: происхождение «из сети» не делает данные бессрочно актуальными.

Есть и граница: явный запрет доступа нельзя обрабатывать как обычный сетевой сбой. В эксперименте он убирает содержимое с экрана; защита после перезапуска и удаление записи с диска этим не доказаны.

В статье — код, 16 проверок репозитория и три widget-теста с управляемыми источниками и часами. Реальная сеть, база данных и работа на телефоне в эту проверку не входили.

Материал пригодится при ревью загрузки и обновления данных: какие сведения доходят до экрана, а какие ему приходится угадывать?

Полный разбор и ссылка на исходники: https://labs.arktelos.dev/ru/articles/cache-freshness-contract/ Инженерные материалы ArkTelos Lab в Telegram: https://t.me/arktelos_lab_ru

Список есть. Обновление не удалось. Что показать на экране? | Сетка — социальная сеть от hh.ru