Fixed selection and checked issues

This commit is contained in:
marcoabat
2023-08-07 13:51:28 +02:00
parent de6b008bfb
commit f313850205
2 changed files with 24 additions and 16 deletions

View File

@@ -105,12 +105,15 @@ class _DetailChecklistPageState extends State<DetailChecklistPage> {
children: [ children: [
TextFormField( TextFormField(
controller: titleCon, controller: titleCon,
textInputAction: TextInputAction.next,
decoration: const InputDecoration( decoration: const InputDecoration(
label: Text('Title'), label: Text('Title'),
), ),
), ),
TextFormField( TextFormField(
controller: descCon, controller: descCon,
onFieldSubmitted: (value) =>
_itemSaved(titleCon.text, descCon.text),
decoration: const InputDecoration( decoration: const InputDecoration(
label: Text('Description'), label: Text('Description'),
), ),
@@ -121,7 +124,6 @@ class _DetailChecklistPageState extends State<DetailChecklistPage> {
TextButton( TextButton(
onPressed: () { onPressed: () {
_itemSaved(titleCon.text, descCon.text); _itemSaved(titleCon.text, descCon.text);
Navigator.of(context).pop();
}, },
child: const Text('save'), child: const Text('save'),
), ),
@@ -136,6 +138,7 @@ class _DetailChecklistPageState extends State<DetailChecklistPage> {
description, description,
_selectedItemId, _selectedItemId,
); );
Navigator.of(context).pop();
} }
Widget? _itemListBuilder(BuildContext context, int index) { Widget? _itemListBuilder(BuildContext context, int index) {
@@ -148,8 +151,8 @@ class _DetailChecklistPageState extends State<DetailChecklistPage> {
_itemSelectionChanged(isSelected, index), _itemSelectionChanged(isSelected, index),
selectionMode: selectedItemIndexes.isNotEmpty, selectionMode: selectedItemIndexes.isNotEmpty,
isChecked: _checkedItemIds.contains(item.id), isChecked: _checkedItemIds.contains(item.id),
onCheckedChanged: (isSelected) => onCheckedChanged: (isChecked) =>
_onItemCheckedChanged(isSelected, item.id), _onItemCheckedChanged(isChecked, item.id),
); );
} }
@@ -258,8 +261,8 @@ class _DetailChecklistPageState extends State<DetailChecklistPage> {
); );
} }
_onItemCheckedChanged(bool isSelected, int? id) async { _onItemCheckedChanged(bool isChecked, int? id) async {
if (isSelected) { if (isChecked) {
await DbHelper.insertCheckedEntry(_checklist!.id, id!); await DbHelper.insertCheckedEntry(_checklist!.id, id!);
} else { } else {
await DbHelper.deleteCheckedEntry(_checklist!.id, id!); await DbHelper.deleteCheckedEntry(_checklist!.id, id!);

View File

@@ -27,6 +27,7 @@ class ItemListTile extends StatefulWidget {
class _ItemListTileState extends State<ItemListTile> { class _ItemListTileState extends State<ItemListTile> {
late bool isChecked; late bool isChecked;
bool isSelected = false;
@override @override
void initState() { void initState() {
@@ -41,25 +42,29 @@ class _ItemListTileState extends State<ItemListTile> {
subtitle: Text(widget.description), subtitle: Text(widget.description),
onTap: _onTap, onTap: _onTap,
onLongPress: _onLongPress, onLongPress: _onLongPress,
trailing: Checkbox( selected: isSelected,
value: isChecked, trailing: Visibility(
onChanged: (value) { visible: !widget.selectionMode,
setState(() => isChecked = value!); child: Checkbox(
widget.onCheckedChanged(value!); value: isChecked,
}, onChanged: (value) {
setState(() => isChecked = value!);
widget.onCheckedChanged(value!);
},
),
), ),
); );
} }
void _onLongPress() { void _onLongPress() {
setState(() => isChecked = true); setState(() => isSelected = !isSelected);
widget.itemSelectionChanged(isChecked); widget.itemSelectionChanged(isSelected);
} }
void _onTap() { void _onTap() {
if (isChecked || widget.selectionMode) { if (isSelected || widget.selectionMode) {
setState(() => isChecked = !isChecked); setState(() => isSelected = !isSelected);
widget.itemSelectionChanged(isChecked); widget.itemSelectionChanged(isSelected);
} else { } else {
widget.onTap(); widget.onTap();
} }