问题描述
我是使用 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,它大大简化了代码。
我可能会在 cubit 类中创建一个函数 import rawpy,numpy as np
raw_obj = rawpy.imread("xxx.dng")
bayer_partten = "".join([chr(raw_obj.color_desc[i]) for i in raw_obj.raw_pattern.flatten()])
和 addToDo(todoItem)
来更新列表并发出更改。列表变量将在 Cubit 中,您将使用 removeToDo(todoItem)
从 Widget 中引用此列表。
您将使用如下函数:context.read<TodoCubit>().todoList
我为 Cubit 实现的最佳方法编写了教程Flutter | Firebase Authentication with Cubit (Bloc) — Tutorial 1 of 2
我认为这篇文章会对你有很大帮助。来看看?