copy equipment profile

This commit is contained in:
Vadim 2023-09-18 16:17:41 +02:00
parent cf235e26d0
commit 16eef583b0
3 changed files with 49 additions and 28 deletions

View file

@ -36,7 +36,7 @@ class EquipmentProfileProviderState extends State<EquipmentProfileProvider> {
void setProfile(EquipmentProfile data) {}
void addProfile(String name) {}
void addProfile(String name, [EquipmentProfile? copyFrom]) {}
void updateProdile(EquipmentProfile data) {}

View file

@ -10,12 +10,14 @@ import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
class EquipmentProfileContainer extends StatefulWidget {
final EquipmentProfile data;
final ValueChanged<EquipmentProfile> onUpdate;
final VoidCallback onCopy;
final VoidCallback onDelete;
final VoidCallback onExpand;
const EquipmentProfileContainer({
required this.data,
required this.onUpdate,
required this.onCopy,
required this.onDelete,
required this.onExpand,
super.key,
@ -85,19 +87,9 @@ class EquipmentProfileContainerState extends State<EquipmentProfileContainer>
),
],
),
trailing: Row(
mainAxisAlignment: MainAxisAlignment.end,
mainAxisSize: MainAxisSize.min,
children: [
_AnimatedArrowButton(
controller: _controller,
onPressed: () => _expanded ? collapse() : expand(),
),
IconButton(
onPressed: widget.onDelete,
icon: const Icon(Icons.delete),
),
],
trailing: _AnimatedArrowButton(
controller: _controller,
onPressed: () => _expanded ? collapse() : expand(),
),
onTap: () => _expanded ? _showNameDialog() : expand(),
),
@ -120,6 +112,8 @@ class EquipmentProfileContainerState extends State<EquipmentProfileContainer>
_equipmentData = _equipmentData.copyWith(shutterSpeedValues: value);
widget.onUpdate(_equipmentData);
},
onCopy: widget.onCopy,
onDelete: widget.onDelete,
),
],
),
@ -204,6 +198,8 @@ class _AnimatedEquipmentListTiles extends AnimatedWidget {
final ValueChanged<List<IsoValue>> onIsoValuesSelecred;
final ValueChanged<List<NdValue>> onNdValuesSelected;
final ValueChanged<List<ShutterSpeedValue>> onShutterSpeedValuesSelected;
final VoidCallback onCopy;
final VoidCallback onDelete;
const _AnimatedEquipmentListTiles({
required AnimationController controller,
@ -212,6 +208,8 @@ class _AnimatedEquipmentListTiles extends AnimatedWidget {
required this.onIsoValuesSelecred,
required this.onNdValuesSelected,
required this.onShutterSpeedValuesSelected,
required this.onCopy,
required this.onDelete,
}) : super(listenable: controller);
Animation<double> get _progress => listenable as Animation<double>;
@ -222,19 +220,41 @@ class _AnimatedEquipmentListTiles extends AnimatedWidget {
alignment: Alignment.topCenter,
size: Size(
double.maxFinite,
_progress.value * Dimens.grid56 * 4,
_progress.value * Dimens.grid56 * 5,
),
// https://github.com/gskinnerTeam/flutter-folio/pull/62
child: Opacity(
opacity: _progress.value,
child: EquipmentListTiles(
selectedApertureValues: equipmentData.apertureValues,
selectedIsoValues: equipmentData.isoValues,
selectedNdValues: equipmentData.ndValues,
selectedShutterSpeedValues: equipmentData.shutterSpeedValues,
onApertureValuesSelected: onApertureValuesSelected,
onIsoValuesSelecred: onIsoValuesSelecred,
onNdValuesSelected: onNdValuesSelected,
onShutterSpeedValuesSelected: onShutterSpeedValuesSelected,
child: Column(
children: [
EquipmentListTiles(
selectedApertureValues: equipmentData.apertureValues,
selectedIsoValues: equipmentData.isoValues,
selectedNdValues: equipmentData.ndValues,
selectedShutterSpeedValues: equipmentData.shutterSpeedValues,
onApertureValuesSelected: onApertureValuesSelected,
onIsoValuesSelecred: onIsoValuesSelecred,
onNdValuesSelected: onNdValuesSelected,
onShutterSpeedValuesSelected: onShutterSpeedValuesSelected,
),
ListTile(
contentPadding: const EdgeInsets.symmetric(horizontal: Dimens.paddingM),
trailing: Row(
mainAxisAlignment: MainAxisAlignment.end,
mainAxisSize: MainAxisSize.min,
children: [
IconButton(
onPressed: onCopy,
icon: const Icon(Icons.copy),
),
IconButton(
onPressed: onDelete,
icon: const Icon(Icons.delete),
),
],
),
),
],
),
),
);

View file

@ -69,6 +69,7 @@ class _EquipmentProfilesScreenState extends State<EquipmentProfilesScreen> {
data: profile,
onExpand: () => _keepExpandedAt(index),
onUpdate: _updateProfileAt,
onCopy: () => _addProfile(profile),
onDelete: () => _removeProfileAt(profile),
),
);
@ -81,13 +82,13 @@ class _EquipmentProfilesScreenState extends State<EquipmentProfilesScreen> {
);
}
void _addProfile() {
void _addProfile([EquipmentProfile? copyFrom]) {
showDialog<String>(
context: context,
builder: (_) => const EquipmentProfileNameDialog(),
).then((value) {
if (value != null) {
EquipmentProfileProvider.of(context).addProfile(value);
).then((name) {
if (name != null) {
EquipmentProfileProvider.of(context).addProfile(name, copyFrom);
}
});
}