From f313850205b3fbb918ae40925be6657816bf72da Mon Sep 17 00:00:00 2001 From: marcoabat Date: Mon, 7 Aug 2023 13:51:28 +0200 Subject: [PATCH] Fixed selection and checked issues --- lib/pages/detail_checklist_page.dart | 13 ++++++++----- lib/widgets/item_list_tile.dart | 27 ++++++++++++++++----------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/lib/pages/detail_checklist_page.dart b/lib/pages/detail_checklist_page.dart index 0cd7e7c..cf9b6e8 100644 --- a/lib/pages/detail_checklist_page.dart +++ b/lib/pages/detail_checklist_page.dart @@ -105,12 +105,15 @@ class _DetailChecklistPageState extends State { children: [ TextFormField( controller: titleCon, + textInputAction: TextInputAction.next, decoration: const InputDecoration( label: Text('Title'), ), ), TextFormField( controller: descCon, + onFieldSubmitted: (value) => + _itemSaved(titleCon.text, descCon.text), decoration: const InputDecoration( label: Text('Description'), ), @@ -121,7 +124,6 @@ class _DetailChecklistPageState extends State { TextButton( onPressed: () { _itemSaved(titleCon.text, descCon.text); - Navigator.of(context).pop(); }, child: const Text('save'), ), @@ -136,6 +138,7 @@ class _DetailChecklistPageState extends State { description, _selectedItemId, ); + Navigator.of(context).pop(); } Widget? _itemListBuilder(BuildContext context, int index) { @@ -148,8 +151,8 @@ class _DetailChecklistPageState extends State { _itemSelectionChanged(isSelected, index), selectionMode: selectedItemIndexes.isNotEmpty, isChecked: _checkedItemIds.contains(item.id), - onCheckedChanged: (isSelected) => - _onItemCheckedChanged(isSelected, item.id), + onCheckedChanged: (isChecked) => + _onItemCheckedChanged(isChecked, item.id), ); } @@ -258,8 +261,8 @@ class _DetailChecklistPageState extends State { ); } - _onItemCheckedChanged(bool isSelected, int? id) async { - if (isSelected) { + _onItemCheckedChanged(bool isChecked, int? id) async { + if (isChecked) { await DbHelper.insertCheckedEntry(_checklist!.id, id!); } else { await DbHelper.deleteCheckedEntry(_checklist!.id, id!); diff --git a/lib/widgets/item_list_tile.dart b/lib/widgets/item_list_tile.dart index 0f412bd..5c84028 100644 --- a/lib/widgets/item_list_tile.dart +++ b/lib/widgets/item_list_tile.dart @@ -27,6 +27,7 @@ class ItemListTile extends StatefulWidget { class _ItemListTileState extends State { late bool isChecked; + bool isSelected = false; @override void initState() { @@ -41,25 +42,29 @@ class _ItemListTileState extends State { subtitle: Text(widget.description), onTap: _onTap, onLongPress: _onLongPress, - trailing: Checkbox( - value: isChecked, - onChanged: (value) { - setState(() => isChecked = value!); - widget.onCheckedChanged(value!); - }, + selected: isSelected, + trailing: Visibility( + visible: !widget.selectionMode, + child: Checkbox( + value: isChecked, + onChanged: (value) { + setState(() => isChecked = value!); + widget.onCheckedChanged(value!); + }, + ), ), ); } void _onLongPress() { - setState(() => isChecked = true); - widget.itemSelectionChanged(isChecked); + setState(() => isSelected = !isSelected); + widget.itemSelectionChanged(isSelected); } void _onTap() { - if (isChecked || widget.selectionMode) { - setState(() => isChecked = !isChecked); - widget.itemSelectionChanged(isChecked); + if (isSelected || widget.selectionMode) { + setState(() => isSelected = !isSelected); + widget.itemSelectionChanged(isSelected); } else { widget.onTap(); }