flutter BLoC : Are Cubits better then BLoC?

标签 flutter dart bloc state-management

我在 Flutter 工作了很长时间,并且有很多已发布的产品。我从来不喜欢 BLoC,更喜欢使用 Provider 或后来的 Riverpod。
我只是不明白那个事件的概念。为什么我们还需要它?我很困惑,因为它实际上很受欢迎...... BLoC 有 Cubit 子类,它似乎更易于使用,但每个人都一直在说:“Cubit 更简单,但功能不那么强大”。但什么是限制?
我什至认为 Cubits 更有用,同时更简单:

  • 使用 Cubit,您只需使用参数调用它的方法。如果需要,您仍然可以监听它的状态并获取方法返回值。
  • 您不需要额外的编码来实现这些事件类型。
  • 您不需要额外的代码来实现 bloc 如何处理每个事件类型。方法做得很好。

  • 例子:
    用户点击某些产品的“添加到购物车”按钮。
    肘:
    cartCubit.addProduct(productId);
    
    集团:
    cartBloc.addEvent(UserAddsProductEvent(productId));
    
    在他们里面:
    肘:
    void addProduct(String productId) async {
       //some validation...
       if(...){...}
       final result = await cartRepo.addProduct(id);
       if(result == ...) {
          state = someState;
       //....
    }
    
    集团:
    void addEvent(CartEvent event) {
       if (event is UserAddsProductEvent) {
          _addProduct(event.productId)
          } else if (event is....) {
          //.....
          }
    }
    
    void _addProduct(String productId) async {
       //some validation...
       if(...){...}
       final result = await cartRepo.addProduct(id);
       if(result == ...) {
          state = someState;
       //....
    }
    
    重点是什么?

    最佳答案

    official documentation 中有关于 Cubit 与 Bloc 的很好的概述.
    总之,Cubit的优势是简单 ,而 Bloc 提供更好的 可追溯性 高级 ReactiveX 操作 .
    在我们的项目中,我们将 Cubit 用于更简单的情况,如果逻辑更复杂并且某些“限制”实际上变得有用,我们将使用 Bloc:

  • 您只能发出新状态作为对事件的 react ,因此实现更直接(但也更冗长)。
  • 所有事件都被一一处理。同样,它使实现更可靠且更易于维护。

  • 此外,这可能是个人喜好的问题,但我喜欢 Bloc,因为它与 FSM 模式的紧密映射。在大多数情况下,应用程序状态可以很好地表示为状态机。即使使用白板也可以更轻松地讨论实现,因为您可以只显示具有多个状态和更改该状态的事件的方案。
    如果您对 Cubit 感到满意,那么您可能不需要 Bloc。毕竟,主要目标是使架构易于理解和维护。

    关于 flutter BLoC : Are Cubits better then BLoC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67796321/

    相关文章:

    html - Dart事件处理常式和Lambda

    listbox - 需要访问多个(可能)所选选项

    flutter - 如何使用 bloc 在 flutter 中导航

    flutter - Flutter如何获取有状态窗口小部件字段的值?

    flutter - Flutter PDF 中的古吉拉特语字体渲染问题

    flutter - Provider 和 setstate 哪个更贵?

    dart - 如何使用 BLoC 模式管理表单状态?

    flutter - BLoC产生新状态后未更新BlocBuilder()

    flutter - flutter -弹出直到没有路线的屏幕

    flutter - 刷新屏幕中的一部分