【问题标题】:Flutter BLoC/Cubit STATE class best practicesFlutter BLoC/Cubit STATE 类最佳实践
【发布时间】: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&lt;Todo&gt; todos 保留在TodosLoaded 子类中还是应该将其移至基类?我的想法是,通过将它移动到基类,它会使我的TodosEmpty 状态变得多余,因为我可以简单地检查 UI 中的待办事项列表是否为空。如果是这种情况,我是否也应该将String error 移至基类?

我确信每种方法都有利有弊,只是希望能向任何对 Bloc 有更多经验的人提出想法。

【问题讨论】:

    标签: flutter dart bloc cubit


    【解决方案1】:

    尝试使用 Cubit,它大大简化了代码。

    我可能会在 cubit 类中创建一个函数 addToDo(todoItem) 和 removeToDo(todoItem) 来更新列表并发出更改。列表变量将在 Cubit 中,您将通过使用 context.read&lt;TodoCubit&gt;().todoList 从小部件中引用此列表。

    你会像这样使用函数:context.read&lt;TodoCubit&gt;().addToDo(todoItem)

    我已经编写了 Cubit 实现最佳方法的教程Flutter | Firebase Authentication with Cubit (Bloc) — Tutorial 1 of 2

    我认为这篇文章会对你有很大帮助。看看?

    【讨论】:

    • 我已经在使用 Cubit 了。我只是想知道在设计我的每个状态时的最佳实践,以及待办事项列表是否应该在 TodosState 或 TodosLoaded 中。
    猜你喜欢
    • 2021-08-17
    • 2021-11-26
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 2021-05-23
    • 2021-04-16
    • 1970-01-01
    • 2020-01-09
    相关资源
    最近更新 更多