import 'dart:async'; import 'package:flutter/widgets.dart'; ValueChanged debounceValueChanged(ValueChanged fn, [int t = 500]) { Timer _debounce; return (value) { // 还在时间之内,抛弃上一次 if (_debounce?.isActive ?? false) _debounce.cancel(); _debounce = Timer(Duration(milliseconds: t), () { fn(value); }); }; } Function debounce( Function func, [ Duration delay = const Duration(milliseconds: 2000), ]) { Timer timer; Function target = () { if (timer?.isActive ?? false) { timer?.cancel(); } timer = Timer(delay, () { func?.call(); }); }; return target; } Function throttle( Future Function() func, ) { if (func == null) { return func; } bool enable = true; Function target = () { if (enable == true) { enable = false; func().then((_) { enable = true; }); } }; return target; }