import 'dart:async'; import 'package:flutter/material.dart'; import './hours_minutes_seconds.dart'; import './num_tools.dart'; class AptSimpleTimerController { late Timer timer; late ShowAptSimpleTimerWithController controller; } class AptSimpleTimerWithController extends StatefulWidget { final int seconds; final Color timerColor; final double fontSize; final Function? onTimerEnd; final AptSimpleTimerController? controller; AptSimpleTimerWithController({ required this.seconds, this.timerColor = Colors.black, this.fontSize = 14, this.onTimerEnd, this.controller, }); @override State createState() => ShowAptSimpleTimerWithController(seconds, controller); } class ShowAptSimpleTimerWithController extends State { int seconds; late Timer timer; AptSimpleTimerController? controller; ShowAptSimpleTimerWithController(this.seconds, this.controller) { timer = Timer.periodic(Duration(seconds: 1), (Timer timer) { if (seconds > 0) { setState(() { seconds--; }); } else { if (widget.onTimerEnd != null) widget.onTimerEnd!(); } }); controller?.timer = timer; controller?.controller = this; } reBuild(int s) { seconds = s; timer = Timer.periodic(Duration(seconds: 1), (Timer timer) { if (seconds > 0) { setState(() { seconds--; }); } else { if (widget.onTimerEnd != null) { widget.onTimerEnd!(); } } }); controller?.timer = timer; } @override Widget build(BuildContext context) { var t = HoursMinutesSeconds(seconds); return Text( formatNum( ' ( ${(t.getDays() != 0) ? ' ${t.getMinutes() < 10 ? '0${t.getMinutes()}' : t.getMinutes()} ' ': ${t.getSeconds() < 10 ? '0${t.getSeconds()}' : t.getSeconds()}' : '' '${t.getMinutes() < 10 ? '0${t.getMinutes()}' : t.getMinutes()} ' ': ${t.getSeconds() < 10 ? '0${t.getSeconds()}' : t.getSeconds()}'} )', divide: false), textAlign: TextAlign.center, style: TextStyle( color: widget.timerColor, fontSize: widget.fontSize, ), ); } @override void dispose() { timer.cancel(); super.dispose(); } }