From af8b08c1203ad22f1867760c508faf3ab0aa0c04 Mon Sep 17 00:00:00 2001 From: marcoabat Date: Sun, 6 Aug 2023 22:33:11 +0200 Subject: [PATCH] mass deletion of items --- lib/pages/detail_checklist_page.dart | 18 ++++++++++++------ lib/services/dbhelper.dart | 4 ++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/pages/detail_checklist_page.dart b/lib/pages/detail_checklist_page.dart index 5fff463..8c45471 100644 --- a/lib/pages/detail_checklist_page.dart +++ b/lib/pages/detail_checklist_page.dart @@ -23,7 +23,7 @@ class _DetailChecklistPageState extends State { List _items = []; int? _selectedItemId; String? pageTitle; - List selectedItems = []; + List selectedItemIndexes = []; @override void dispose() { @@ -137,7 +137,7 @@ class _DetailChecklistPageState extends State { appBar: AppBar( title: Text(pageTitle ?? ''), actions: [ - if (selectedItems.isNotEmpty) + if (selectedItemIndexes.isNotEmpty) IconButton( onPressed: _onDeleteItemsPressed, icon: const Icon(Icons.delete)) @@ -161,7 +161,7 @@ class _DetailChecklistPageState extends State { onTap: () => _itemTapped(index), itemSelectionChanged: (isSelected) => _itemSelectionChanged(isSelected, index), - selectionMode: selectedItems.isNotEmpty, + selectionMode: selectedItemIndexes.isNotEmpty, ); } @@ -175,14 +175,20 @@ class _DetailChecklistPageState extends State { void _itemSelectionChanged(bool isSelected, int index) { if (isSelected) { setState(() { - selectedItems.add(index); + selectedItemIndexes.add(index); }); } else { setState(() { - selectedItems.remove(index); + selectedItemIndexes.remove(index); }); } } - void _onDeleteItemsPressed() {} + void _onDeleteItemsPressed() { + List itemIds = []; + for (final itemIndex in selectedItemIndexes) { + itemIds.add(_items.elementAt(itemIndex).id!); + } + DbHelper.deleteItemsById(itemIds); + } } diff --git a/lib/services/dbhelper.dart b/lib/services/dbhelper.dart index 3eb718a..2d85c79 100644 --- a/lib/services/dbhelper.dart +++ b/lib/services/dbhelper.dart @@ -144,6 +144,10 @@ class DbHelper { await _client.from(itemsTableName).delete().eq('id', id); } + static Future deleteItemsById(List ids) async { + await _client.from(itemsTableName).delete().in_('id', ids); + } + static Stream get authChangeEventStream => _client.auth.onAuthStateChange; }