Flutter: debounce 避免高频率事件

Posted ajanuw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter: debounce 避免高频率事件相关的知识,希望对你有一定的参考价值。

函数

import 'dart:async';

Function debounce(Function fn, [int t = 30]) 
  Timer _debounce;
  return () 
    // 还在时间之内,抛弃上一次
    if (_debounce?.isActive ?? false) _debounce.cancel();

    _debounce = Timer(Duration(milliseconds: t), () 
      fn();
    );
  ;


RaisedButton(
      onPressed: debounce(() 
          print(1);
     , 3000),
    child: Text('Test'),
)

rxdart

import 'package:rxdart/rxdart.dart';

  final _counterSubject = BehaviorSubject<int>();

  @override
  void initState() 
    super.initState();
    _counterSubject.debounceTime(Duration(seconds: 2)).listen((int i) 
      print(i);
    );
  

RaisedButton(
  onPressed: () 
    _counterSubject.add(1);
  ,
  child: Text('Test'),
)

以上是关于Flutter: debounce 避免高频率事件的主要内容,如果未能解决你的问题,请参考以下文章

Js中防抖和节流的区别,论如何避免重复点击

防抖函数-debounce

js 中的截流函数throttle 和 debounce

浅谈 Underscore.js 中 _.throttle 和 _.debounce 的差异[转]

javascript函数的节流[throttle]与防抖[debounce]

对防抖和节流的理解及其应用场景