import 'package:flutter/material.dart'; import 'package:flutter/material.dart' as material; import 'package:fmassive/database.dart'; import 'package:fmassive/days.dart'; import 'package:fmassive/main.dart'; import 'package:moor_flutter/moor_flutter.dart'; class EditPlanPage extends StatefulWidget { final PlansCompanion plan; const EditPlanPage({required this.plan, super.key}); @override createState() => _EditPlanPageState(); } class _EditPlanPageState extends State { final TextEditingController _daysController = TextEditingController(); final TextEditingController _workoutsController = TextEditingController(); late PlansCompanion plan; final daysNode = FocusNode(); final workoutsNode = FocusNode(); @override void initState() { super.initState(); plan = widget.plan; _daysController.text = plan.days.value; _workoutsController.text = plan.workouts.value; if (plan.id.present) workoutsNode.requestFocus(); else daysNode.requestFocus(); } @override dispose() { daysNode.dispose(); workoutsNode.dispose(); super.dispose(); } @override Widget build(BuildContext context) { List actions = []; if (widget.plan.id.present) actions.add(IconButton( onPressed: () async { await db.plans.deleteOne(widget.plan); if (!mounted) return; Navigator.pop(context); }, icon: const Icon(Icons.delete))); return SafeArea( child: Scaffold( appBar: AppBar(title: const Text('Edit Plan'), actions: actions), body: Padding( padding: const EdgeInsets.all(16.0), child: material.Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Days(onChanged: (days) { setState(() { days = days; }); }), TextFormField( controller: _workoutsController, focusNode: workoutsNode, onTap: () { _workoutsController.selection = TextSelection( baseOffset: 0, extentOffset: _workoutsController.text.length); }, decoration: const InputDecoration(labelText: 'Workouts'), onChanged: (value) { setState(() { plan = plan.copyWith(workouts: Value(value)); }); }, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: () async { if (_daysController.text.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('Please enter days'))); daysNode.requestFocus(); return; } if (plan.id.present) await db.update(db.plans).write(plan); else await db.into(db.plans).insert(plan); if (!mounted) return; Navigator.pop(context); }, child: const Icon(Icons.check), ), )); } }