delete checklists

This commit is contained in:
marcoabat
2023-08-06 23:55:18 +02:00
parent af8b08c120
commit 69e94d323a
2 changed files with 61 additions and 27 deletions

View File

@@ -7,6 +7,7 @@ import 'package:provider/provider.dart';
class DashboardPage extends StatefulWidget { class DashboardPage extends StatefulWidget {
const DashboardPage({super.key}); const DashboardPage({super.key});
static const routeName = '/dashboard'; static const routeName = '/dashboard';
@override @override
@@ -15,40 +16,29 @@ class DashboardPage extends StatefulWidget {
class _DashboardPageState extends State<DashboardPage> { class _DashboardPageState extends State<DashboardPage> {
final Future<List<Checklist>> checklistFuture = DbHelper.fetchChecklist; final Future<List<Checklist>> checklistFuture = DbHelper.fetchChecklist;
late List<Checklist> checklists;
late ChecklistProvider checklistProvider; late ChecklistProvider checklistProvider;
@override int? _selectedChecklistIndex;
void initState() {
super.initState();
}
@override FloatingActionButton get _fabBuilder {
Widget build(BuildContext context) { if (_selectedChecklistIndex == null) {
checklistProvider = Provider.of<ChecklistProvider>(context, listen: true); return FloatingActionButton(
return Scaffold(
appBar: AppBar(
title: const Text('Brießenchecker9000'),
actions: [
IconButton(
onPressed: () => DbHelper.logout(),
icon: const Icon(Icons.logout),
)
],
),
body: FutureBuilder(
future: checklistFuture,
builder: _futureBuilder,
),
floatingActionButton: FloatingActionButton(
onPressed: _onAddTapped, onPressed: _onAddTapped,
child: const Icon(Icons.add), child: const Icon(Icons.add),
), );
}
return FloatingActionButton(
onPressed: _onDeleteTapped,
backgroundColor: Theme.of(context).colorScheme.error,
child: Icon(Icons.delete, color: Theme.of(context).colorScheme.onError),
); );
} }
Widget _futureBuilder( Widget _futureBuilder(
BuildContext context, AsyncSnapshot<List<Checklist>> snapshot) { BuildContext context, AsyncSnapshot<List<Checklist>> snapshot) {
if (snapshot.hasData) { if (snapshot.hasData) {
checklists = snapshot.data!;
return ListView.builder( return ListView.builder(
itemCount: snapshot.data!.length, itemCount: snapshot.data!.length,
itemBuilder: (context, index) => itemBuilder: (context, index) =>
@@ -66,7 +56,9 @@ class _DashboardPageState extends State<DashboardPage> {
return ListTile( return ListTile(
title: Text(cl.title == '' ? 'Unnamed ${cl.id}' : cl.title), title: Text(cl.title == '' ? 'Unnamed ${cl.id}' : cl.title),
subtitle: Text(cl.description), subtitle: Text(cl.description),
onTap: () => _onListEntryTapped(cl), onTap: () => _onListEntryTapped(cl, index),
onLongPress: () => _onLongPress(index),
selected: _selectedChecklistIndex == index,
); );
} }
@@ -77,8 +69,45 @@ class _DashboardPageState extends State<DashboardPage> {
() => Navigator.of(context).pushNamed(DetailChecklistPage.routeName)); () => Navigator.of(context).pushNamed(DetailChecklistPage.routeName));
} }
void _onListEntryTapped(Checklist cl) { void _onListEntryTapped(Checklist cl, int index) {
checklistProvider.updateSelectedChecklist(cl.id, silent: true); if (_selectedChecklistIndex == index) {
Navigator.of(context).pushNamed(DetailChecklistPage.routeName); setState(() => _selectedChecklistIndex = null);
} else if (_selectedChecklistIndex != null) {
setState(() => _selectedChecklistIndex = index);
} else {
checklistProvider.updateSelectedChecklist(cl.id, silent: true);
Navigator.of(context).pushNamed(DetailChecklistPage.routeName);
}
}
void _onLongPress(int index) {
setState(() {
_selectedChecklistIndex = index;
});
}
void _onDeleteTapped() {
DbHelper.deleteChecklistByid(
checklists.elementAt(_selectedChecklistIndex!).id);
}
@override
Widget build(BuildContext context) {
checklistProvider = Provider.of<ChecklistProvider>(context, listen: true);
return Scaffold(
appBar: AppBar(
title: const Text('Brießenchecker9000'),
actions: [
IconButton(
onPressed: () => DbHelper.logout(),
icon: const Icon(Icons.logout),
)
],
),
body: FutureBuilder(
future: checklistFuture,
builder: _futureBuilder,
),
floatingActionButton: _fabBuilder);
} }
} }

View File

@@ -148,6 +148,11 @@ class DbHelper {
await _client.from(itemsTableName).delete().in_('id', ids); await _client.from(itemsTableName).delete().in_('id', ids);
} }
static Future<void> deleteChecklistByid(int id) async {
await _client.from(itemsTableName).delete().eq('checklist_id', id);
await _client.from(checklistsTableName).delete().eq('id', id);
}
static Stream<AuthState> get authChangeEventStream => static Stream<AuthState> get authChangeEventStream =>
_client.auth.onAuthStateChange; _client.auth.onAuthStateChange;
} }