mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2024-11-22 07:20:39 +00:00
change equipment profile name via dialog
This commit is contained in:
parent
b6a7f68b5c
commit
1b52b1abf5
2 changed files with 47 additions and 68 deletions
|
@ -1,7 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/scheduler.dart';
|
||||
import 'package:lightmeter/generated/l10n.dart';
|
||||
import 'package:lightmeter/res/dimens.dart';
|
||||
import 'package:lightmeter/screens/settings/components/metering/components/equipment_profiles/components/equipment_profile_screen/components/equipment_profile_name_dialog/widget_dialog_equipment_profile_name.dart';
|
||||
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
|
||||
|
||||
import 'components/equipment_list_tiles/widget_list_tiles_equipments.dart';
|
||||
|
@ -25,7 +25,7 @@ class EquipmentProfileContainer extends StatefulWidget {
|
|||
}
|
||||
|
||||
class EquipmentProfileContainerState extends State<EquipmentProfileContainer> {
|
||||
late EquipmentProfileData _equipmentProfileData = EquipmentProfileData(
|
||||
late EquipmentProfileData _equipmentData = EquipmentProfileData(
|
||||
id: widget.data.id,
|
||||
name: widget.data.name,
|
||||
apertureValues: widget.data.apertureValues,
|
||||
|
@ -33,14 +33,12 @@ class EquipmentProfileContainerState extends State<EquipmentProfileContainer> {
|
|||
shutterSpeedValues: widget.data.shutterSpeedValues,
|
||||
isoValues: widget.data.isoValues,
|
||||
);
|
||||
late final _nameController = TextEditingController(text: _equipmentProfileData.name);
|
||||
final _fieldFocusNode = FocusNode();
|
||||
bool _expanded = false;
|
||||
|
||||
@override
|
||||
void didUpdateWidget(EquipmentProfileContainer oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
_equipmentProfileData = EquipmentProfileData(
|
||||
_equipmentData = EquipmentProfileData(
|
||||
id: widget.data.id,
|
||||
name: widget.data.name,
|
||||
apertureValues: widget.data.apertureValues,
|
||||
|
@ -50,13 +48,6 @@ class EquipmentProfileContainerState extends State<EquipmentProfileContainer> {
|
|||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_nameController.dispose();
|
||||
_fieldFocusNode.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Card(
|
||||
|
@ -66,70 +57,59 @@ class EquipmentProfileContainerState extends State<EquipmentProfileContainer> {
|
|||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.fromLTRB(
|
||||
Dimens.paddingM,
|
||||
0,
|
||||
Dimens.paddingM,
|
||||
0,
|
||||
),
|
||||
child: IgnorePointer(
|
||||
ignoring: !_expanded,
|
||||
child: TextFormField(
|
||||
focusNode: _fieldFocusNode,
|
||||
controller: _nameController,
|
||||
onFieldSubmitted: (value) {
|
||||
_equipmentProfileData = _equipmentProfileData.copyWith(name: value);
|
||||
widget.onUpdate(_equipmentProfileData);
|
||||
},
|
||||
decoration: InputDecoration(
|
||||
hintText: S.of(context).equipmentProfileNameHint,
|
||||
border: InputBorder.none,
|
||||
),
|
||||
),
|
||||
),
|
||||
ListTile(
|
||||
title: Text(
|
||||
_equipmentData.name,
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
trailing: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
_collapseButton(),
|
||||
IconButton(
|
||||
onPressed: widget.onDelete,
|
||||
icon: const Icon(Icons.delete),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
_collapseButton(),
|
||||
IconButton(
|
||||
onPressed: widget.onDelete,
|
||||
icon: const Icon(Icons.delete),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
onTap: () {
|
||||
showDialog<String>(
|
||||
context: context,
|
||||
builder: (_) => EquipmentProfileNameDialog(initialValue: _equipmentData.name),
|
||||
).then((value) {
|
||||
if (value != null) {
|
||||
_equipmentData = _equipmentData.copyWith(name: value);
|
||||
widget.onUpdate(_equipmentData);
|
||||
}
|
||||
});
|
||||
},
|
||||
),
|
||||
AnimatedSize(
|
||||
alignment: Alignment.topCenter,
|
||||
duration: Dimens.durationM,
|
||||
child: _expanded
|
||||
? EquipmentListTiles(
|
||||
selectedApertureValues: _equipmentProfileData.apertureValues,
|
||||
selectedIsoValues: _equipmentProfileData.isoValues,
|
||||
selectedNdValues: _equipmentProfileData.ndValues,
|
||||
selectedShutterSpeedValues: _equipmentProfileData.shutterSpeedValues,
|
||||
selectedApertureValues: _equipmentData.apertureValues,
|
||||
selectedIsoValues: _equipmentData.isoValues,
|
||||
selectedNdValues: _equipmentData.ndValues,
|
||||
selectedShutterSpeedValues: _equipmentData.shutterSpeedValues,
|
||||
onApertureValuesSelected: (value) {
|
||||
_equipmentProfileData =
|
||||
_equipmentProfileData.copyWith(apertureValues: value);
|
||||
widget.onUpdate(_equipmentProfileData);
|
||||
_equipmentData = _equipmentData.copyWith(apertureValues: value);
|
||||
widget.onUpdate(_equipmentData);
|
||||
},
|
||||
onIsoValuesSelecred: (value) {
|
||||
_equipmentProfileData = _equipmentProfileData.copyWith(isoValues: value);
|
||||
widget.onUpdate(_equipmentProfileData);
|
||||
_equipmentData = _equipmentData.copyWith(isoValues: value);
|
||||
widget.onUpdate(_equipmentData);
|
||||
},
|
||||
onNdValuesSelected: (value) {
|
||||
_equipmentProfileData = _equipmentProfileData.copyWith(ndValues: value);
|
||||
widget.onUpdate(_equipmentProfileData);
|
||||
_equipmentData = _equipmentData.copyWith(ndValues: value);
|
||||
widget.onUpdate(_equipmentData);
|
||||
},
|
||||
onShutterSpeedValuesSelected: (value) {
|
||||
_equipmentProfileData =
|
||||
_equipmentProfileData.copyWith(shutterSpeedValues: value);
|
||||
widget.onUpdate(_equipmentProfileData);
|
||||
_equipmentData = _equipmentData.copyWith(shutterSpeedValues: value);
|
||||
widget.onUpdate(_equipmentData);
|
||||
},
|
||||
)
|
||||
: Row(mainAxisSize: MainAxisSize.max),
|
||||
|
@ -164,6 +144,5 @@ class EquipmentProfileContainerState extends State<EquipmentProfileContainer> {
|
|||
setState(() {
|
||||
_expanded = false;
|
||||
});
|
||||
_fieldFocusNode.unfocus();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,14 +2,16 @@ import 'package:flutter/material.dart';
|
|||
import 'package:lightmeter/generated/l10n.dart';
|
||||
|
||||
class EquipmentProfileNameDialog extends StatefulWidget {
|
||||
const EquipmentProfileNameDialog({super.key});
|
||||
final String initialValue;
|
||||
|
||||
const EquipmentProfileNameDialog({this.initialValue = '', super.key});
|
||||
|
||||
@override
|
||||
State<EquipmentProfileNameDialog> createState() => _EquipmentProfileNameDialogState();
|
||||
}
|
||||
|
||||
class _EquipmentProfileNameDialogState extends State<EquipmentProfileNameDialog> {
|
||||
final TextEditingController _nameController = TextEditingController();
|
||||
late final _nameController = TextEditingController(text: widget.initialValue);
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
|
@ -33,9 +35,7 @@ class _EquipmentProfileNameDialogState extends State<EquipmentProfileNameDialog>
|
|||
ValueListenableBuilder(
|
||||
valueListenable: _nameController,
|
||||
builder: (_, value, __) => TextButton(
|
||||
onPressed: value.text.isNotEmpty
|
||||
? () => Navigator.of(context).pop(value.text)
|
||||
: null,
|
||||
onPressed: value.text.isNotEmpty ? () => Navigator.of(context).pop(value.text) : null,
|
||||
child: Text(S.of(context).save),
|
||||
),
|
||||
),
|
||||
|
|
Loading…
Reference in a new issue