【问题标题】:Flutter - Transform flutter bloc event to add debounceFlutter - 转换颤振 bloc 事件以添加去抖动
【发布时间】:2020-11-08 08:48:56
【问题描述】:

我正在尝试使用颤振块制作一个无限列表。

我从这里参考了:https://github.com/felangel/bloc/blob/926029cae2d7614d38b5a9a8952e36bb59054b02/examples/github_search/common_github_search/lib/src/github_search_bloc/github_search_bloc.dart#L15

根据这篇文章,要在两个事件之间添加延迟以便 api 不会收到垃圾邮件,您需要覆盖 transformEvents 并为这样的事件添加 debounce:

@override
  Stream<GithubSearchState> transformEvents(
    Stream<GithubSearchEvent> events,
    Stream<GithubSearchState> Function(GithubSearchEvent event) next,
  ) {
    return (events as Observable<GithubSearchEvent>)
        .debounceTime(
          Duration(milliseconds: 300),
        )
        .switchMap(next);
  }

我面临的问题是 Observable 已被 RxDart 弃用,我不确定如何完成上述要求。

【问题讨论】:

    标签: flutter dart bloc rxdart flutter-bloc


    【解决方案1】:

    我找到了解决办法。

    @override
      Stream<Transition< GithubSearchEvent, GithubSearchState >> transformEvents(
          Stream< GithubSearchEvent > events, transitionFn) {
        return events
            .debounceTime(const Duration(milliseconds: 300))
            .switchMap((transitionFn));
      }
    

    【讨论】:

    • 如果发送太频繁,这可能会跳过事件?
    • EventTransformer 已被弃用,我们如何使用onEvent 实现这一点?
    • @Hamed 你可以将transformer 传递给on 函数。 bloc_concurrency 包中有一些预定义的,但要消除抖动,您必须自己传递函数。
    【解决方案2】:

    bloc 8.0.0 以来,语法略有变化,您需要将其作为转换器传递给on 函数:

    import 'package:rxdart/rxdart.dart';
    //...
    
        on<GithubSearchEvent>(
          (event, emit) {},
          transformer: (events, mapper) {
            return events.debounceTime(const Duration(milliseconds: 300));
          },
        );
    

    您可以像这样创建一个可重用的转换器作为顶级函数:

    EventTransformer<Event> debounceTransformer<Event>(Duration duration) {
      return (events, mapper) => events.debounceTime(duration);
    }
    

    并像这样使用它:

        on<GithubSearchEvent>(
          (event, emit) {},
          transformer: debounceTransformer(Duration(milliseconds: 300)),
        );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-16
      • 2022-10-01
      • 1970-01-01
      • 2021-04-20
      • 2015-04-12
      • 1970-01-01
      • 2016-07-24
      相关资源
      最近更新 更多