微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flutter debounceTime 未按预期工作

如何解决Flutter debounceTime 未按预期工作

我有一个 RangeSlider。

期望的行为: 当与滑块交互并触发 onChanged 时,应向后端发出请求以更新值。但是,需要 5 秒的谴责时间,不要太频繁地击中端点。

当前行为: 只有一些 onChanged 事件被谴责。例如,如果有 68 个 onChanged 触发器,则有 15 次调用后端。所有触发器都在一秒内(1

const int CLIP_UPDATE_DEBOUNCE_DURATION_SECONDS = 5;

final PublishSubject<IntRangeValues> rangeValuesPublishSubject = PublishSubject<IntRangeValues>();

    ClipCubit(this.clipEntity,this._userContentService) : super(RangeValuesUpdated(RangeValues(clipEntity.clipStartTimestamp,clipEntity.clipEndTimestamp))) {
rangeValuesPublishSubject.debounceTime(Duration(seconds: CLIP_UPDATE_DEBOUNCE_DURATION_SECONDS)).listen((intRangeValues) {
  print('UPDATE CALLED AT: ${DateTime.Now().second}    ---   ${intRangeValue}');
  return sl<ClipsRepository>().updateClip(clipId: clipEntity.id,clipStart: intRangeValues.start,clipEnd: intRangeValues.end);
});

// Called via onChanged
  void updateClip(RangeValues rangeValues) {
    if ((rangeValues.end - rangeValues.start) < MIN_CLIP_DURATION_SECONDS) return;
    print('ADDING RANGE VALUES: ${rangeValues.start} --- ${rangeValues.end}');
    rangeValuesPublishSubject.add(intRangeValues);
    clipEntity = clipEntity.copyWith(clipStartTimestamp: rangeValues.start,clipEndTimestamp: rangeValues.end);
    emit(RangeValuesUpdated(rangeValues));
    updateClipsSubject();
  }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。