Лучшие практики Flutter BLoC / Cubit STATE class

Я новичок в использовании Bloc и Cubit, поэтому я пытаюсь выяснить некоторые передовые практики, особенно с компонентом State. У меня есть простое приложение Todos, в котором Todos может находиться в нескольких разных состояниях:

part of 'todos_cubit.dart';

abstract class TodosState extends Equatable {
  const TodosState();

  @override
  List<Object> get props => [];
}

class TodosLoading extends TodosState {}

class TodosLoaded extends TodosState {
  final List<Todo> todos;

  TodosLoaded(this.todos);

  @override
  bool operator ==(Object other) {
    if (identical(this, other)) return true;

    return other is TodosLoaded && listEquals(other.todos, todos);
  }

  @override
  int get hashCode => todos.hashCode;
}

class TodosEmpty extends TodosState {}

class TodosError extends TodosState {
  final String error;

  TodosError(this.error);

  @override
  bool operator ==(Object other) {
    if (identical(this, other)) return true;

    return other is TodosError && other.error == error;
  }

  @override
  int get hashCode => error.hashCode;
}

У меня вопрос: следует ли мне оставить List<Todo> todos в подклассе TodosLoaded или его следует переместить в базовый класс? Я думаю, что, переместив его в базовый класс, это сделало бы мое TodosEmpty состояние избыточным, потому что я мог бы просто проверить, пуст ли список задач в пользовательском интерфейсе. Если это так, следует ли мне также переместить String error в базовый класс?

Я уверен, что у каждого подхода есть свои плюсы и минусы, я просто надеюсь донести идеи до любого, у кого больше опыта работы с Bloc.


person rejy11    schedule 27.03.2021    source источник


Ответы (1)


Попробуйте использовать Cubit, это сильно упрощает код.

Я бы, вероятно, создал функцию addToDo(todoItem) и removeToDo(todoItem) в классе cubit, которая обновляет список и испускает изменение. Переменная списка будет в Cubit, и вы будете обращаться к этому списку из виджета, используя context.read<TodoCubit>().todoList.

И вы будете использовать такие функции: context.read<TodoCubit>().addToDo(todoItem)

Я написал руководство по наилучшему подходу к реализации Cubit Flutter | Аутентификация Firebase с Cubit (Bloc) - Урок 1 из 2

Думаю, эта статья вам очень поможет. Взгляните ????

person Christer    schedule 27.04.2021
comment
Я уже использую Cubit. Мне просто было интересно узнать о лучших практиках при проектировании каждого из моих состояний и о том, должен ли список задач быть в TodosState или TodosLoaded. - person rejy11; 28.04.2021