Flutter Flatter集团/Cubit国家级最佳实践

Flutter Flatter集团/Cubit国家级最佳实践,flutter,dart,bloc,cubit,Flutter,Dart,Bloc,Cubit,我对使用Bloc和Cubit还不熟悉,所以我正试图找出一些专门针对State组件的最佳实践。我有一个简单的TODO应用程序,其中TODO可以处于多个不同的状态: part of 'todos_cubit.dart'; abstract class TodosState extends Equatable { const TodosState(); @override List<Object> get props => []; } class TodosLoad

我对使用Bloc和Cubit还不熟悉,所以我正试图找出一些专门针对State组件的最佳实践。我有一个简单的TODO应用程序,其中TODO可以处于多个不同的状态:

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;
}
todos_cubit.dart'的一部分;
TodosState抽象类扩展了Equalable{
常数todostate();
@凌驾
列表获取道具=>[];
}
类TodosLoading扩展TodosState{}
类TodosLoaded扩展TodosState{
最后的待办事项清单;
TodosLoaded(this.todos);
@凌驾
布尔运算符==(对象其他){
如果(相同(此,其他))返回true;
返回other is todosload&&listquals(other.todos,todos);
}
@凌驾
int get hashCode=>todos.hashCode;
}
类TodosEmpty扩展TodosState{}
类TodosError扩展为TodosState{
最终字符串错误;
TodosError(this.error);
@凌驾
布尔运算符==(对象其他){
如果(相同(此,其他))返回true;
返回other is TodosError&&other.error==error;
}
@凌驾
int get hashCode=>error.hashCode;
}
我的问题是,我应该在
todosload
子类中保留
列表todo
,还是应该将其移动到基类?我的想法是,通过将它移动到基类,它将使我的
TodosEmpty
状态变得多余,因为我可以简单地检查一下,看看UI中的todo列表是否为空。如果是这种情况,我是否也应该将
字符串错误
移动到基类


我确信每种方法都有其优缺点,只是希望能从任何对Bloc有更多经验的人那里获得灵感。

尝试使用Cubit,它可以大大简化代码

我可能会在cubit类中创建一个函数
addToDo(todoItem)
removeToDo(todoItem)
,用于更新列表并发出更改。list变量将位于Cubit中,您将使用
context.read().todoList
从小部件中引用此列表

您将使用如下函数:
context.read().addToDo(todoItem)

我已经为Cubit实现的最佳方法编写了教程


我想这篇文章对你会有很大帮助。看一看,我已经在用Cubit了。我只是想知道在设计我的每个州时的最佳实践,以及TODO列表应该是TodosState还是TODOSLOAD。