[APP-ERR-03] Замена технических ошибок gRPC на визуальные UI-модалки

Экран Приёмка Продуктов

Published

October 14, 2026

NoteКраткая карточка задачи
  • Репозиторий / Компонент: food_tracker_mobile (Dart / Flutter).
  • Тип задачи: Frontend (UI / Верстка).
  • Связана с экраном: Приёмка продуктов (Режим чека / Режим голоса).
  • Статус: Готово к реализации

Описание задачи

Текущая реализация при возникновении сетевых сбоев выводит сырой технический текст ошибки gRPC сокета напрямую на экран пользователя (например, gRPC Error (code: 16... authorization token is not provided)).

Необходимо скрыть технические детали от пользователя и заменить плашку ошибки на красивые нижние шторки (Modal Bottom Sheets) с человекочитаемым текстом и кнопками действий в зависимости от кода ошибки.


Справочник маппинга ошибок (Для UI)

При возникновении ошибки сетевого слоя, интерфейс должен отобразить нижнюю шторку, используя следующие тексты и иконки:

1. Ошибка авторизации сессии (gRPC 16 / HTTP 401)

  • Иконка: <i class="bi-lock-fill"></i>
  • Заголовок: Сбой авторизации
  • Текст: Не удалось подтвердить ваш профиль для загрузки данных. Пожалуйста, попробуйте обновить сессию.
  • Кнопка действия: [ Обновить сессию ]

2. Сервер недоступен / Обрыв сети (gRPC 14 / HTTP 503)

  • Иконка: <i class="bi-cloud-slash-fill"></i>
  • Заголовок: Проблемы со связью
  • Текст: Сервер приёмки временно недоступен. Проверьте подключение к интернету или попробуйте еще раз через минуту.
  • Кнопка действия: [ Повторить попытку ]

3. Ошибка валидации / Нечитаемый чек (gRPC 3 / HTTP 400)

  • Иконка: <i class="bi-exclamation-triangle-fill"></i>
  • Заголовок: Ошибка распознавания
  • Текст: Не удалось распознать продукты. Пожалуйста, сделайте более четкое фото чека или повторите аудиозапись.
  • Кнопка действия: [ Понятно ]

Инструкция по шагам для Flutter

  1. Создание компонента шторки: Сверстать универсальный виджет AppErrorBottomSheet на основе стандартного showModalBottomSheet.
  2. Параметризация виджета: Компонент должен принимать на вход иконку, заголовок, текст описания и колбэк-функцию для кнопки действия (onPressed).
  3. Перехват стейта ошибки: В UI-слое экрана приёмки продуктов внутри BlocListener вместо вывода сырого текста ошибки вызывать метод отображения созданной шторки.
  4. Реализация маппинга: Написать простую конструкцию switch-case по кодам GrpcError, которая подставляет нужные параметры из справочника выше при вызове шторки.