added zoom slider to equipment profiles settings

This commit is contained in:
Vadim 2024-04-06 22:32:08 +02:00
parent cb220f9e9e
commit 37219920a5
5 changed files with 148 additions and 1 deletions

View file

@ -60,6 +60,8 @@
"shutterSpeedValuesFilterDescription": "Select the range of shutter speed values to display. This is usually determined by the camera body you are using.",
"isoValues": "ISO values",
"isoValuesFilterDescription": "Select the ISO values to display. These may be your most commonly used values or those supported by your camera.",
"lensZoom": "Lens zoom",
"lensZoomDescription": "Set the zoom level relative to the phone's camera to match your camera's viewfinder.",
"equipmentProfile": "Equipment profile",
"equipmentProfiles": "Equipment profiles",
"tapToAdd": "Tap to add",

View file

@ -1,7 +1,9 @@
import 'package:flutter/material.dart';
import 'package:lightmeter/generated/l10n.dart';
import 'package:lightmeter/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_container/components/slider_picker_list_tile/widget_list_tile_slider_picker.dart';
import 'package:lightmeter/screens/settings/components/shared/dialog_filter/widget_dialog_filter.dart';
import 'package:lightmeter/screens/settings/components/shared/dialog_range_picker/widget_dialog_picker_range.dart';
import 'package:lightmeter/screens/settings/components/shared/dialog_slider_picker/widget_dialog_slider_picker.dart';
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
class EquipmentListTiles extends StatelessWidget {
@ -67,6 +69,15 @@ class EquipmentListTiles extends StatelessWidget {
rangeSelect: true,
onChanged: onShutterSpeedValuesSelected,
),
SliderPickerListTile(
icon: Icons.zoom_in,
title: S.of(context).lensZoom,
description: S.of(context).lensZoomDescription,
value: 1.0,
range: const RangeValues(1, 7),
onChanged: (value) {},
valueAdapter: (context, value) => 'x${value.toStringAsFixed(2)}',
),
],
);
}

View file

@ -0,0 +1,49 @@
import 'package:flutter/material.dart';
import 'package:lightmeter/screens/settings/components/shared/dialog_slider_picker/widget_dialog_slider_picker.dart';
class SliderPickerListTile extends StatelessWidget {
final IconData icon;
final String title;
final String description;
final double value;
final RangeValues range;
final ValueChanged<double> onChanged;
final String Function(BuildContext, double) valueAdapter;
const SliderPickerListTile({
required this.icon,
required this.title,
required this.description,
required this.value,
required this.range,
required this.onChanged,
required this.valueAdapter,
super.key,
});
@override
Widget build(BuildContext context) {
return ListTile(
leading: Icon(icon),
title: Text(title),
trailing: Text(value.toString()),
onTap: () {
showDialog<double>(
context: context,
builder: (_) => DialogSliderPicker(
icon: Icon(icon),
title: title,
description: description,
value: value,
range: range,
valueAdapter: valueAdapter,
),
).then((value) {
if (value != null) {
onChanged(value);
}
});
},
);
}
}

View file

@ -222,7 +222,7 @@ class _AnimatedEquipmentListTiles extends AnimatedWidget {
alignment: Alignment.topCenter,
size: Size(
double.maxFinite,
_progress.value * Dimens.grid56 * 5,
_progress.value * Dimens.grid56 * 6,
),
// https://github.com/gskinnerTeam/flutter-folio/pull/62
child: Opacity(

View file

@ -0,0 +1,85 @@
import 'package:flutter/material.dart';
import 'package:lightmeter/generated/l10n.dart';
import 'package:lightmeter/res/dimens.dart';
class DialogSliderPicker extends StatefulWidget {
final Icon icon;
final String title;
final String description;
final double value;
final RangeValues range;
final String Function(BuildContext context, double value) valueAdapter;
const DialogSliderPicker({
required this.icon,
required this.title,
required this.description,
required this.value,
required this.range,
required this.valueAdapter,
super.key,
});
@override
State<DialogSliderPicker> createState() => _DialogSliderPickerState();
}
class _DialogSliderPickerState extends State<DialogSliderPicker> {
late double value = widget.value;
@override
Widget build(BuildContext context) {
return AlertDialog(
icon: widget.icon,
titlePadding: Dimens.dialogIconTitlePadding,
title: Text(widget.title),
contentPadding: EdgeInsets.zero,
content: SizedBox(
width: double.maxFinite,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: Dimens.dialogIconTitlePadding,
child: Text(widget.description),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: Dimens.paddingL),
child: Text(
widget.valueAdapter(context, value),
style: Theme.of(context).textTheme.bodyLarge,
),
),
Row(
children: [
Expanded(
child: Slider(
value: value,
min: widget.range.start,
max: widget.range.end,
onChanged: (value) {
setState(() {
this.value = value;
});
},
),
),
],
),
],
),
),
actionsPadding: Dimens.dialogActionsPadding,
actions: [
TextButton(
onPressed: Navigator.of(context).pop,
child: Text(S.of(context).cancel),
),
TextButton(
onPressed: () => Navigator.of(context).pop(value),
child: Text(S.of(context).save),
),
],
);
}
}