Flutter BLoC/Cubit STATE 类最佳实践
Posted
技术标签:
【中文标题】Flutter BLoC/Cubit STATE 类最佳实践【英文标题】:Flutter BLoC/Cubit STATE class best practices 【发布时间】:2021-06-24 04:26:00 【问题描述】:我是使用 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 有更多经验的人提出想法。
【问题讨论】:
【参考方案1】:尝试使用 Cubit,它大大简化了代码。
我可能会在 cubit 类中创建一个函数 addToDo(todoItem)
和 removeToDo(todoItem)
来更新列表并发出更改。列表变量将在 Cubit 中,您将通过使用 context.read<TodoCubit>().todoList
从小部件中引用此列表。
你会像这样使用函数:context.read<TodoCubit>().addToDo(todoItem)
我已经编写了 Cubit 实现最佳方法的教程Flutter | Firebase Authentication with Cubit (Bloc) — Tutorial 1 of 2
我认为这篇文章会对你有很大帮助。看看?
【讨论】:
我已经在使用 Cubit 了。我只是想知道在设计我的每个状态时的最佳实践,以及待办事项列表是否应该在 TodosState 或 TodosLoaded 中。以上是关于Flutter BLoC/Cubit STATE 类最佳实践的主要内容,如果未能解决你的问题,请参考以下文章
在 Flutter 中使用 Bloc/Cubit 时绕过 CONTEXT
具有多个firebase请求的flutter bloc cubit最佳实践
我应该先启动 Cubit,然后再将代码重构为 Bloc 吗?