import 'dart:async'; import 'package:flutter/foundation.dart'; enum LimitMode { debounce, //防抖 throttle, //节流 } class ActionLimiter { final int milliseconds; final LimitMode mode; Timer? _debounceTimer; DateTime? _lastActionTime; ActionLimiter({ this.milliseconds = 300, this.mode = LimitMode.debounce, }); void run(VoidCallback action) { if (mode == LimitMode.debounce) { // 防抖:只执行最后一次 _debounceTimer?.cancel(); _debounceTimer = Timer(Duration(milliseconds: milliseconds), action); } else if (mode == LimitMode.throttle) { // 节流:间隔内只执行一次 final now = DateTime.now(); if (_lastActionTime == null || now.difference(_lastActionTime!) > Duration(milliseconds: milliseconds)) { _lastActionTime = now; action(); } } } void dispose() { _debounceTimer?.cancel(); } }