mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2025-03-12 13:20:42 +00:00
copy equipment profile
This commit is contained in:
parent
cf235e26d0
commit
16eef583b0
3 changed files with 49 additions and 28 deletions
|
@ -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) {}
|
||||||
|
|
||||||
|
|
|
@ -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),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue