Существуют ли примеры использования BLoC и Cubit в вашем проекте?
Sobes Copilot
Get answers in real time
Answer from AI
sobes.tech AI
Да, в моём проекте использовались как BLoC, так и Cubit для управления состоянием, в зависимости от сложности логики.
BLoC применялся в сценариях, требующих обработки множества событий и выполнения асинхронных операций с возможностью отслеживания промежуточных состояний (загрузка, ошибка):
- Аутентификация пользователя: Обработка событий
LoginEvent,RegisterEvent,LogoutEvent. Состояния включалиAuthInitial,AuthLoading,Authenticated,Unauthenticated,AuthError. - Работа с API: Получение и отправка данных, где требовалось отслеживание состояний загрузки и обработки ошибок. Например, загрузка списка товаров или отправка заказа.
Пример использования BLoC для получения данных:
// event.dart
abstract class DataEvent {}
class LoadDataEvent extends DataEvent {}
// state.dart
abstract class DataState {}
class DataInitial extends DataState {}
class DataLoading extends DataState {}
class DataLoaded extends DataState {
final List<String> data;
DataLoaded(this.data);
}
class DataError extends DataState {
final String message;
DataError(this.message);
}
// bloc.dart
class DataBloc extends Bloc<DataEvent, DataState> {
DataBloc() : super(DataInitial()) {
on<LoadDataEvent>((event, emit) async {
emit(DataLoading());
try {
// Имитация загрузки данных
await Future.delayed(Duration(seconds: 2));
final loadedData = ['Item 1', 'Item 2', 'Item 3'];
emit(DataLoaded(loadedData));
} catch (e) {
emit(DataError(e.toString()));
}
});
}
}
Cubit использовался для более простых случаев управления состоянием, где основное взаимодействие сводится к изменению текущего состояния без сложной обработки событий:
- Состояние UI-элементов: Управление видимостью виджетов, состоянием чекбоксов, переключателей, активностью кнопок.
- Простые счетчики или переключатели: Например, управление значением лайков или переключением темы (светлая/темная).
Пример использования Cubit для переключения состояния:
// cubit.dart
class ToggleCubit extends Cubit<bool> {
ToggleCubit() : super(false); // Изначальное состояние - false
void toggle() => emit(!state); // Переключение состояния
}
Выбор между BLoC и Cubit определялся сложностью логики и потребностью в обработке различных событий. BLoC — для многогранной логики с потоками событий и состояний, Cubit — для прямого изменения состояния.