使用 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?的主要内容,如果未能解决你的问题,请参考以下文章
在加载 Firebase 快照时使用 Flutter 中的 Bloc 流式等待和阻止其他事件
如何在 Hot Reload 上使用 Provider 维护 Flutter Global BloC 状态?
在 Flutter 中使用 Bloc/Cubit 时绕过 CONTEXT