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: [
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<DetailChecklistPage> {
TextButton(
onPressed: () {
_itemSaved(titleCon.text, descCon.text);
Navigator.of(context).pop();
},
child: const Text('save'),
),
@@ -136,6 +138,7 @@ class _DetailChecklistPageState extends State<DetailChecklistPage> {
description,
_selectedItemId,
);
Navigator.of(context).pop();
}
Widget? _itemListBuilder(BuildContext context, int index) {
@@ -148,8 +151,8 @@ class _DetailChecklistPageState extends State<DetailChecklistPage> {
_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<DetailChecklistPage> {
);
}
_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!);

View File

@@ -27,6 +27,7 @@ class ItemListTile extends StatefulWidget {
class _ItemListTileState extends State<ItemListTile> {
late bool isChecked;
bool isSelected = false;
@override
void initState() {
@@ -41,25 +42,29 @@ class _ItemListTileState extends State<ItemListTile> {
subtitle: Text(widget.description),
onTap: _onTap,
onLongPress: _onLongPress,
trailing: Checkbox(
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();
}