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 {
const DashboardPage({super.key});
static const routeName = '/dashboard';
@override
@@ -15,40 +16,29 @@ class DashboardPage extends StatefulWidget {
class _DashboardPageState extends State<DashboardPage> {
final Future<List<Checklist>> checklistFuture = DbHelper.fetchChecklist;
late List<Checklist> checklists;
late ChecklistProvider checklistProvider;
@override
void initState() {
super.initState();
}
int? _selectedChecklistIndex;
@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: FloatingActionButton(
FloatingActionButton get _fabBuilder {
if (_selectedChecklistIndex == null) {
return FloatingActionButton(
onPressed: _onAddTapped,
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(
BuildContext context, AsyncSnapshot<List<Checklist>> snapshot) {
if (snapshot.hasData) {
checklists = snapshot.data!;
return ListView.builder(
itemCount: snapshot.data!.length,
itemBuilder: (context, index) =>
@@ -66,7 +56,9 @@ class _DashboardPageState extends State<DashboardPage> {
return ListTile(
title: Text(cl.title == '' ? 'Unnamed ${cl.id}' : cl.title),
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));
}
void _onListEntryTapped(Checklist cl) {
checklistProvider.updateSelectedChecklist(cl.id, silent: true);
Navigator.of(context).pushNamed(DetailChecklistPage.routeName);
void _onListEntryTapped(Checklist cl, int index) {
if (_selectedChecklistIndex == index) {
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);
}
}