65 lines
1.6 KiB
Dart
65 lines
1.6 KiB
Dart
|
part of '../../main.dart';
|
||
|
|
||
|
class TimerState extends StatefulWidget {
|
||
|
//final bool expanded;
|
||
|
//final TextAlign textAlign;
|
||
|
//final EdgeInsetsGeometry padding;
|
||
|
//final int maxLines;
|
||
|
|
||
|
const TimerState({Key key}) : super(key: key);
|
||
|
|
||
|
@override
|
||
|
_TimerStateState createState() => _TimerStateState();
|
||
|
|
||
|
}
|
||
|
|
||
|
class _TimerStateState extends State<TimerState> {
|
||
|
|
||
|
Timer timer;
|
||
|
Duration remaining = Duration(seconds: 0);
|
||
|
|
||
|
void checkState(TimerEntity entity) {
|
||
|
if (entity.state == EntityState.active) {
|
||
|
//Logger.d("Timer is active");
|
||
|
if (timer == null || !timer.isActive) {
|
||
|
timer = Timer.periodic(Duration(seconds: 1), (timer) {
|
||
|
setState(() {
|
||
|
try {
|
||
|
int passed = DateTime
|
||
|
.now()
|
||
|
.difference(entity._lastUpdated)
|
||
|
.inSeconds;
|
||
|
remaining = Duration(seconds: entity.duration.inSeconds - passed);
|
||
|
} catch (e) {
|
||
|
Logger.e("Error calculating ${entity.entityId} remaining time: ${e.toString()}");
|
||
|
remaining = Duration(seconds: 0);
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
} else {
|
||
|
timer?.cancel();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@override
|
||
|
Widget build(BuildContext context) {
|
||
|
EntityModel model = EntityModel.of(context);
|
||
|
TimerEntity entity = model.entityWrapper.entity;
|
||
|
checkState(entity);
|
||
|
if (entity.state != EntityState.active) {
|
||
|
return SimpleEntityState();
|
||
|
} else {
|
||
|
return SimpleEntityState(
|
||
|
customValue: "${remaining.toString().split('.')[0]}",
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@override
|
||
|
void dispose() {
|
||
|
timer?.cancel();
|
||
|
super.dispose();
|
||
|
}
|
||
|
|
||
|
}
|