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 setProfile(EquipmentProfile data) {}
void addProfile(String name) {} void addProfile(String name, [EquipmentProfile? copyFrom]) {}
void updateProdile(EquipmentProfile data) {} void updateProdile(EquipmentProfile data) {}

View file

@ -10,12 +10,14 @@ import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
class EquipmentProfileContainer extends StatefulWidget { class EquipmentProfileContainer extends StatefulWidget {
final EquipmentProfile data; final EquipmentProfile data;
final ValueChanged<EquipmentProfile> onUpdate; final ValueChanged<EquipmentProfile> onUpdate;
final VoidCallback onCopy;
final VoidCallback onDelete; final VoidCallback onDelete;
final VoidCallback onExpand; final VoidCallback onExpand;
const EquipmentProfileContainer({ const EquipmentProfileContainer({
required this.data, required this.data,
required this.onUpdate, required this.onUpdate,
required this.onCopy,
required this.onDelete, required this.onDelete,
required this.onExpand, required this.onExpand,
super.key, super.key,
@ -85,20 +87,10 @@ class EquipmentProfileContainerState extends State<EquipmentProfileContainer>
), ),
], ],
), ),
trailing: Row( trailing: _AnimatedArrowButton(
mainAxisAlignment: MainAxisAlignment.end,
mainAxisSize: MainAxisSize.min,
children: [
_AnimatedArrowButton(
controller: _controller, controller: _controller,
onPressed: () => _expanded ? collapse() : expand(), onPressed: () => _expanded ? collapse() : expand(),
), ),
IconButton(
onPressed: widget.onDelete,
icon: const Icon(Icons.delete),
),
],
),
onTap: () => _expanded ? _showNameDialog() : expand(), onTap: () => _expanded ? _showNameDialog() : expand(),
), ),
_AnimatedEquipmentListTiles( _AnimatedEquipmentListTiles(
@ -120,6 +112,8 @@ class EquipmentProfileContainerState extends State<EquipmentProfileContainer>
_equipmentData = _equipmentData.copyWith(shutterSpeedValues: value); _equipmentData = _equipmentData.copyWith(shutterSpeedValues: value);
widget.onUpdate(_equipmentData); 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<IsoValue>> onIsoValuesSelecred;
final ValueChanged<List<NdValue>> onNdValuesSelected; final ValueChanged<List<NdValue>> onNdValuesSelected;
final ValueChanged<List<ShutterSpeedValue>> onShutterSpeedValuesSelected; final ValueChanged<List<ShutterSpeedValue>> onShutterSpeedValuesSelected;
final VoidCallback onCopy;
final VoidCallback onDelete;
const _AnimatedEquipmentListTiles({ const _AnimatedEquipmentListTiles({
required AnimationController controller, required AnimationController controller,
@ -212,6 +208,8 @@ class _AnimatedEquipmentListTiles extends AnimatedWidget {
required this.onIsoValuesSelecred, required this.onIsoValuesSelecred,
required this.onNdValuesSelected, required this.onNdValuesSelected,
required this.onShutterSpeedValuesSelected, required this.onShutterSpeedValuesSelected,
required this.onCopy,
required this.onDelete,
}) : super(listenable: controller); }) : super(listenable: controller);
Animation<double> get _progress => listenable as Animation<double>; Animation<double> get _progress => listenable as Animation<double>;
@ -222,11 +220,14 @@ class _AnimatedEquipmentListTiles extends AnimatedWidget {
alignment: Alignment.topCenter, alignment: Alignment.topCenter,
size: Size( size: Size(
double.maxFinite, double.maxFinite,
_progress.value * Dimens.grid56 * 4, _progress.value * Dimens.grid56 * 5,
), ),
// https://github.com/gskinnerTeam/flutter-folio/pull/62
child: Opacity( child: Opacity(
opacity: _progress.value, opacity: _progress.value,
child: EquipmentListTiles( child: Column(
children: [
EquipmentListTiles(
selectedApertureValues: equipmentData.apertureValues, selectedApertureValues: equipmentData.apertureValues,
selectedIsoValues: equipmentData.isoValues, selectedIsoValues: equipmentData.isoValues,
selectedNdValues: equipmentData.ndValues, selectedNdValues: equipmentData.ndValues,
@ -236,6 +237,25 @@ class _AnimatedEquipmentListTiles extends AnimatedWidget {
onNdValuesSelected: onNdValuesSelected, onNdValuesSelected: onNdValuesSelected,
onShutterSpeedValuesSelected: onShutterSpeedValuesSelected, 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, data: profile,
onExpand: () => _keepExpandedAt(index), onExpand: () => _keepExpandedAt(index),
onUpdate: _updateProfileAt, onUpdate: _updateProfileAt,
onCopy: () => _addProfile(profile),
onDelete: () => _removeProfileAt(profile), onDelete: () => _removeProfileAt(profile),
), ),
); );
@ -81,13 +82,13 @@ class _EquipmentProfilesScreenState extends State<EquipmentProfilesScreen> {
); );
} }
void _addProfile() { void _addProfile([EquipmentProfile? copyFrom]) {
showDialog<String>( showDialog<String>(
context: context, context: context,
builder: (_) => const EquipmentProfileNameDialog(), builder: (_) => const EquipmentProfileNameDialog(),
).then((value) { ).then((name) {
if (value != null) { if (name != null) {
EquipmentProfileProvider.of(context).addProfile(value); EquipmentProfileProvider.of(context).addProfile(name, copyFrom);
} }
}); });
} }