mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2024-10-19 06:40:59 +00:00
5c27f726c5
* 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
58 lines
1.9 KiB
Dart
58 lines
1.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:lightmeter/res/dimens.dart';
|
|
|
|
class BottomControlsBar extends StatelessWidget {
|
|
final Widget center;
|
|
final Widget? left;
|
|
final Widget? right;
|
|
|
|
const BottomControlsBar({
|
|
required this.center,
|
|
this.left,
|
|
this.right,
|
|
super.key,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final scheme = Theme.of(context).colorScheme;
|
|
return IconButtonTheme(
|
|
data: IconButtonThemeData(
|
|
style: ButtonStyle(
|
|
backgroundColor: MaterialStatePropertyAll(scheme.surface),
|
|
elevation: const MaterialStatePropertyAll(4),
|
|
iconColor: MaterialStatePropertyAll(scheme.onSurface),
|
|
shadowColor: const MaterialStatePropertyAll(Colors.transparent),
|
|
surfaceTintColor: MaterialStatePropertyAll(scheme.surfaceTint),
|
|
fixedSize: const MaterialStatePropertyAll(Size(Dimens.grid48, Dimens.grid48)),
|
|
),
|
|
),
|
|
child: ClipRRect(
|
|
borderRadius: const BorderRadius.only(
|
|
topLeft: Radius.circular(Dimens.borderRadiusL),
|
|
topRight: Radius.circular(Dimens.borderRadiusL),
|
|
),
|
|
child: ColoredBox(
|
|
color: Theme.of(context).colorScheme.surface,
|
|
child: SafeArea(
|
|
top: false,
|
|
child: Padding(
|
|
padding: const EdgeInsets.symmetric(vertical: Dimens.paddingL),
|
|
child: Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
|
children: [
|
|
if (left != null) Expanded(child: Center(child: left)) else const Spacer(),
|
|
SizedBox.fromSize(
|
|
size: const Size.square(Dimens.grid72),
|
|
child: center,
|
|
),
|
|
if (right != null) Expanded(child: Center(child: right)) else const Spacer(),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|