m3_lightmeter/lib/screens/timer/components/text/widget_text_timer.dart
Vadim 5c27f726c5
ML-173 Add a timer for long exposures (#174)
* wip

* added start/stop button

* animated timeline

* fixed timer stop state

* added reset button (wip)

* added `onExposurePairTap` callback

* integrated `TimerScreen` to navigation

* separated `TimerTimeline`

* fixed timeline flickering

* added milliseconds to timer

* synchronized timeline with actual timer

* reused `BottomControlsBar`

* fixed default scaffold background color

* moved center button size to the bar itself

* display selected exposure pair on timer screen

* separated reusable `AnimatedCircluarButton`

* release camera when timer is opened

* added `TimerInteractor`

* added `TimerBloc` test

* fixed hours parsing

* added scenarios for timer golden test

* adjusted timer timeline colors

* show iso & nd values on timer screen

* automatically close timer screen after timeout

* added timer autostart

* reverted theme changes

* updated goldens

* typo

* removed timer screen auto-dismiss

* increased timer vibration duration

* replaced outlined locks

* increased 1/3 values font size
2024-05-07 19:24:51 +02:00

56 lines
1.7 KiB
Dart

import 'package:flutter/material.dart';
class TimerText extends StatelessWidget {
final Duration timeLeft;
final Duration duration;
const TimerText({
required this.timeLeft,
required this.duration,
});
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisSize: MainAxisSize.min,
children: [
Text(
parseSeconds(),
style: Theme.of(context).textTheme.displayMedium,
),
Text(
addZeroIfNeeded(timeLeft.inMilliseconds % 1000, 3),
style: Theme.of(context).textTheme.displaySmall,
),
],
);
}
String parseSeconds() {
final buffer = StringBuffer();
int remainingMs = timeLeft.inMilliseconds;
// longer than 1 hours
if (duration.inMilliseconds >= Duration.millisecondsPerHour) {
final hours = remainingMs ~/ Duration.millisecondsPerHour;
buffer.writeAll([addZeroIfNeeded(hours), ':']);
remainingMs -= hours * Duration.millisecondsPerHour;
}
// longer than 1 minute
final minutes = remainingMs ~/ Duration.millisecondsPerMinute;
buffer.writeAll([addZeroIfNeeded(minutes), ':']);
remainingMs -= minutes * Duration.millisecondsPerMinute;
// longer than 1 second
final seconds = remainingMs ~/ Duration.millisecondsPerSecond;
buffer.writeAll([addZeroIfNeeded(seconds)]);
remainingMs -= seconds * Duration.millisecondsPerSecond;
return buffer.toString();
}
String addZeroIfNeeded(int value, [int charactersCount = 2]) {
final zerosCount = charactersCount - value.toString().length;
return '${"0" * zerosCount}$value';
}
}