JHHK

欢迎来到我的个人网站
行者常至 为者常成

4 常用

目录

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;
  }
}

行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.