📍 Single state
Это класс, содержащий все возможные поля, описывающие состояние BLoC. При изменении любого из этих полей мы создаем новое состояние, полностью обновляя текущий state.
Пример:
class MyBlocState{
final List<Todo> todos;
final bool loading;
final String? failure;
…
}
Использование метода emit для изменения состояния:
emit(MyBlocState.copyWith(
loading: true,
));
📍 State machine
В этом подходе каждое состояние представлено отдельным классом, унаследованным от общего родительского. Похожим способом в BLoC обычно создают события:
abstract class MyBlocState{}
class LoadingState extends MyBlocState{}
class LoadedState extends MyBlocState{
final List<Todo> todos;
…
}
class FailureState extends MyBlocState{
final String failure;
…
}
Для использования такого подхода в BLoC можно эмитить конкретные состояния:
emit(LoadingState());
Какой из этих подходов выбрать — зависит от сложности логики вашего приложения. State machine лучше подходит для сложных сценариев с разными типами состояний, тогда как single state — для простых случаев с минимальными изменениями.
Какой подход вам ближе? Пишите в комментариях!


