Sobes.tech
Back to questions
Middle
121
questionbank

Существуют ли примеры использования 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 — для прямого изменения состояния.