flutter - Flutter BLoC/Cubit STATE 类最佳实践
问题描述
我是使用 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
状态变得多余,因为我可以简单地检查 UI 中的待办事项列表是否为空。如果是这种情况,我是否也应该将其String error
移至基类?
我确信每种方法都有利有弊,只是希望能从任何对 Bloc 有更多经验的人那里获得灵感。
解决方案
尝试使用 Cubit,它大大简化了代码。
我可能会创建一个函数addToDo(todoItem)
并removeToDo(todoItem)
在 cubit 类中更新列表并发出更改。列表变量将在 Cubit 中,您将使用 Widget 从小部件中引用此列表context.read<TodoCubit>().todoList
。
您将使用如下功能:context.read<TodoCubit>().addToDo(todoItem)
我已经为 Cubit 实现Flutter的最佳方法编写了教程| 使用 Cubit (Bloc) 进行 Firebase 身份验证 — 教程 1 of 2
我想这篇文章会对你有很大的帮助。看一看
推荐阅读
- c# - 从 JSON 反序列化为对象列表
- php - 如何使用 post 方法传递参数并从 url 获取响应并使用 gson 和 volley 在 android 中显示?
- intellij-idea - 将 Intellij 配置为 Eclipse
- c - 指向指针地址的指针
- laravel - Laravel 验证请求(不是参数)
- java - 存储 count-min-sketch 的前 k 个结果
- javascript - Angular 6 App zone.js drainMicroTaskQueue 无限循环
- maven-dependency - 依赖项与 Java 7 的兼容性
- javascript - Boostrap 3 中 Datatables 插件的显示格式自定义
- intellij-idea - 将多行注释自动格式化为单行 intellij