使用 bloc 时如何替换 Flutter 中的 transformEvents?

Posted

技术标签:

【中文标题】使用 bloc 时如何替换 Flutter 中的 transformEvents?【英文标题】:How to replace transformEvents in Flutter while using bloc? 【发布时间】:2022-01-13 18:28:33 【问题描述】:

我最近升级了一个 Flutter 项目及其所有依赖项。

之前我使用的是bloc: ^6.1.1,现在升级到bloc: ^8.0.1。但是transformEvents 在 8.0.0 版本中被删除,代码中就是这样使用的。

  @override
  Stream<Transition<LoginEvent, LoginState>> transformEvents(
    Stream<LoginEvent> events,
    transitionFn,
  ) 
    final observableStream = events;
    final nonDebounceStream = observableStream.where((event) 
      return (event is! EmailChanged && event is! PasswordChanged);
    );
    final debounceStream = observableStream.where((event) 
      return (event is EmailChanged || event is PasswordChanged);
    ).debounceTime(Duration(milliseconds: 500));
    return super.transformEvents(
        nonDebounceStream.mergeWith([debounceStream]), transitionFn);
  

我检查了一下,它已被删除以支持EventTransformer。现在我在理解transformEvents 将如何被它替换时遇到了问题。

我在网上查了一下,但无法正常工作。任何帮助都会很棒。谢谢!

【问题讨论】:

【参考方案1】:

您应该提供自定义的EventTransformer,而不是已弃用的transformEvents。请参阅此问题以获取更多详细信息和示例 - https://github.com/felangel/bloc/issues/2915

您的代码应如下所示:

  EventTransformer<LoginEvent> transform<LoginEvent>(Duration duration) 
    return (events, mapper) => events.debounceTime(duration).flatMap(mapper); 
  

Mapper 是 EventMapper(您的事件处理程序)的一个实例。

【讨论】:

以上是关于使用 bloc 时如何替换 Flutter 中的 transformEvents?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用flutter bloc模式通过分页加载数据列表?

在加载 Firebase 快照时使用 Flutter 中的 Bloc 流式等待和阻止其他事件

如何在 Hot Reload 上使用 Provider 维护 Flutter Global BloC 状态?

在 Flutter 中使用 Bloc/Cubit 时绕过 CONTEXT

如何在 BLOC 的 Flutter 中的 BottomNavigationBar 中设置 currentIndex?

如何使用带有 Flutter 的 BloC 访问登录时获得的身份验证令牌