目录
timer的使用
倒计时
Timer timer = Timer(const Duration(seconds: 2), () {
debugPrint('倒计时结束');
});
// 在合适的时机取消timer
// timer.cancel();
定时器
int count = 5;
Timer.periodic(const Duration(seconds: 1), (Timer timer) {
debugPrint('定时器调用');
count--;
if (count <= 0) {
timer.cancel();
}
});
获取设备宽高
BuildContext ctx;
double deviceWidth = MediaQuery.of(ctx).size.width;
double deviceHeight = MediaQuery.of(ctx).size.height;
debugPrint('deviceWidth = $deviceWidth, deviceHeight = $deviceHeight');
计算文本宽度
// 计算给定文本的宽度
double widthForText(String text, double fontSize) {
TextPainter textPainter = TextPainter(
text: TextSpan(text: text, style: TextStyle(fontSize: fontSize)),
textDirection: TextDirection.ltr,
);
textPainter.layout();
return textPainter.width;
}
String text = 'we are the world!';
double width = widthForText(text, 12);
debugPrint('$width');
函数防抖
class Debounce<T> {
// 无参数传递的
static exec({required void Function() fn, required int ms}) {
Timer? _debounceTimer;
callFn() {
// 清除之前的定时器
if (_debounceTimer != null) {
_debounceTimer!.cancel();
}
// 设置新的定时器
_debounceTimer = Timer(Duration(milliseconds: ms), () => fn());
}
// 将函数返回,函数内部捕获了_debounceTimer
return callFn;
}
// 可传递一个参数
static exec1<T>({required void Function(T) fn, required int ms}) {
Timer? _debounceTimer;
callFn(T param) {
// 清除之前的定时器
if (_debounceTimer != null) {
_debounceTimer!.cancel();
}
// 设置新的定时器
_debounceTimer = Timer(Duration(milliseconds: ms), () => fn(param));
}
return callFn;
}
// 可传递两个参数
static exec2<T, S>({required void Function(T, S) fn, required int ms}) {
Timer? _debounceTimer;
callFn(T param1, S param2) {
// 清除之前的定时器
if (_debounceTimer != null) {
_debounceTimer!.cancel();
}
// 设置新的定时器
_debounceTimer = Timer(Duration(milliseconds: ms), () => fn(param1, param2));
}
return callFn;
}
}
行者常至,为者常成!