Ответ вслух Senior Dart: классы и миксины обновлено

Моделирование состояния через sealed-классы

Вопрос

Как вы моделируете состояния экрана (загрузка, данные, ошибка) в Dart 3 и почему так?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Вместо трёх полей isLoading, data, error я делаю sealed class ProfileState с подклассами Loading, Loaded(User user), Failed(Object error). Так нельзя оказаться в состоянии «загрузка и одновременно ошибка», а данные доступны только в том подклассе, где они есть.

Что должно прозвучать в ответе

  • `sealed`-класс с подклассами Loading, Data, Error вместо флагов `isLoading`, `error`

  • Невозможные комбинации состояний не выражаются в типах

  • Исчерпывающий `switch` в UI: компилятор подскажет необработанное состояние

  • Подклассы неизменяемые, равенство через `==`/`hashCode`, `equatable` или `freezed`

  • Состояния, специфичные для каждого случая данных, лежат в своём подклассе

Что могут спросить следом

  • Что делать, если состояний десятки?
  • Как сохранить предыдущие данные во время обновления?
  • Чем freezed помогает в этом подходе?

Разбор

Образцовый ответ: «Вместо трёх полей isLoading, data, error я делаю sealed class ProfileState с подклассами Loading, Loaded(User user), Failed(Object error). Так нельзя оказаться в состоянии «загрузка и одновременно ошибка», а данные доступны только в том подклассе, где они есть. В build пишу switch по состоянию, и компилятор проверяет полноту: добавили состояние Empty, и сборка покажет все места, где его забыли. Подклассы неизменяемые, равенство через equatable или freezed, чтобы блок не выдавал одинаковые состояния. Если нужно показать старые данные во время обновления, добавляю это явно, например Loaded(user, refreshing: true), а не держу параллельные флаги»

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме