diff --git a/lib/plan_list.dart b/lib/plan_list.dart new file mode 100644 index 0000000..408ff6d --- /dev/null +++ b/lib/plan_list.dart @@ -0,0 +1,61 @@ +import 'package:flutter/material.dart'; +import 'package:fmassive/database.dart'; +import 'package:fmassive/edit_plan.dart'; +import 'package:fmassive/main.dart'; +import 'package:moor_flutter/moor_flutter.dart'; + +class PlanList extends StatelessWidget { + const PlanList({ + super.key, + required this.plans, + }); + + final List plans; + + @override + Widget build(BuildContext context) { + return ListView.builder( + itemCount: plans.length, + itemBuilder: (context, index) { + return ListTile( + title: Text(plans[index].days.replaceAll(',', ', ')), + subtitle: Text(plans[index].exercises), + onLongPress: () => showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Delete set'), + content: Text( + 'Are you sure you want to delete ${plans[index].days}?'), + actions: [ + ElevatedButton( + child: const Text('Cancel'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ElevatedButton( + child: const Text('Delete'), + onPressed: () async { + final navigator = Navigator.of(context); + await db.plans.deleteOne(plans[index]); + navigator.pop(); + }, + ), + ], + ); + }, + ), + onTap: () async { + await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + EditPlanPage(plan: plans[index].toCompanion(false)), + ), + ); + }); + }, + ); + } +} diff --git a/lib/plans_page.dart b/lib/plans_page.dart index 18b20a4..6d51469 100644 --- a/lib/plans_page.dart +++ b/lib/plans_page.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:fmassive/database.dart'; import 'package:fmassive/edit_plan.dart'; import 'package:fmassive/main.dart'; +import 'package:fmassive/plan_list.dart'; import 'package:moor/moor.dart'; class PlansPage extends StatelessWidget { @@ -78,23 +79,7 @@ class _PlansPageState extends State<_PlansPage> { if (plans == null) return const Center(child: CircularProgressIndicator()); - return ListView.builder( - itemCount: plans.length, - itemBuilder: (context, index) { - return ListTile( - title: Text(plans[index].days.replaceAll(',', ', ')), - subtitle: Text(plans[index].exercises), - onTap: () async { - await Navigator.push( - context, - MaterialPageRoute( - builder: (context) => EditPlanPage( - plan: plans[index].toCompanion(false)), - ), - ); - }); - }, - ); + return PlanList(plans: plans); }), floatingActionButton: FloatingActionButton( onPressed: () async {