Flutter 计时器转换工具

66 阅读1分钟
import 'dart:async';

///需求
///0s转化为hh:mm:ss格式
///满足60s分钟加一,秒钟归0,以此类推

class TimerUtils {
  static final TimerUtils _instance = TimerUtils._internal();
  late Timer _timer;
  int _hours = 0;
  int _minutes = 0;
  int _seconds = 0;
  bool _isRunning = false;

  factory TimerUtils() {
    return _instance;
  }

  TimerUtils._internal();

  String get currentTime => '${_formatTime(_hours)}:${_formatTime(_minutes)}:${_formatTime(_seconds)}';

  bool get isRunning => _isRunning;

  void start() {
    if (!_isRunning) {
      _timer = Timer.periodic(const Duration(seconds: 1), (timer) {
        _seconds++;
        if (_seconds == 60) {
          _seconds = 0;
          _minutes++;
          if (_minutes == 60) {
            _minutes = 0;
            _hours++;
          }
        }
      });
      _isRunning = true;
    }
  }

  void stop() {
    if (_isRunning) {
      _timer.cancel();
      _isRunning = false;
      // 在停止时调用重置方法
      _hours = 0;
      _minutes = 0;
      _seconds = 0;
    }
  }

  String _formatTime(int time) {
    return time < 10 ? '0$time' : '$time';
  }
}