Fixed selection and checked issues
This commit is contained in:
@@ -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!);
|
||||||
|
|||||||
@@ -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,
|
||||||
|
trailing: Visibility(
|
||||||
|
visible: !widget.selectionMode,
|
||||||
|
child: Checkbox(
|
||||||
value: isChecked,
|
value: isChecked,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
setState(() => isChecked = value!);
|
setState(() => isChecked = value!);
|
||||||
widget.onCheckedChanged(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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user