Я новичок в использовании 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.