import 'package:briessenchecker/models/checklist.dart'; import 'package:briessenchecker/models/listitem.dart'; import 'package:briessenchecker/services/checklist_provider.dart'; import 'package:briessenchecker/services/dbhelper.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class DetailChecklistPage extends StatefulWidget { const DetailChecklistPage({super.key}); static const routeName = '/detail'; @override State createState() => _DetailChecklistPageState(); } class _DetailChecklistPageState extends State { late Future _checklistFuture; late final ChecklistProvider _checklistProvider; late Checklist _currentChecklist; int? _selectedItemId; @override void dispose() { super.dispose(); _checklistProvider.updateSelectedChecklist(null, silent: true); } @override void initState() { super.initState(); _checklistProvider = Provider.of(context, listen: false); _checklistFuture = DbHelper.getChecklistById(_checklistProvider.selectedChecklistId!); } Widget _futureBuilder( BuildContext context, AsyncSnapshot snapshot) { if (snapshot.hasData) { _currentChecklist = snapshot.data!; String title = _currentChecklist.title; return Column( children: [ Text(title == '' ? 'Unnamed ${_currentChecklist.id}' : title), Text(_currentChecklist.description), ], ); } else if (snapshot.hasError) { return Text(snapshot.error.toString()); } else { return const CircularProgressIndicator(); } } void _addItemTapped() { showDialog(context: context, builder: _addItemDialog); } Widget _addItemDialog(BuildContext context) { TextEditingController titleCon = TextEditingController(); TextEditingController descCon = TextEditingController(); if (_selectedItemId != null) { final item = _currentChecklist.items.elementAt(_selectedItemId!); titleCon.text = item.title; descCon.text = item.description; } return AlertDialog( title: const Text('additem'), content: Column( mainAxisSize: MainAxisSize.min, children: [ TextFormField( controller: titleCon, decoration: const InputDecoration( label: Text('Title'), ), ), TextFormField( controller: descCon, decoration: const InputDecoration( label: Text('Description'), ), ), ], ), actions: [ TextButton( onPressed: () { _itemSaved(titleCon.text, descCon.text); Navigator.of(context).pop(); }, child: const Text('save'), ), ], ); } void _itemSaved(String title, String description) { DbHelper.addOrUpdateItem(_checklistProvider.selectedChecklistId!, title, description, _selectedItemId); } @override Widget build(BuildContext context) { return Scaffold( body: FutureBuilder( future: _checklistFuture, builder: _futureBuilder, ), floatingActionButton: FloatingActionButton( onPressed: _addItemTapped, child: const Icon(Icons.add), ), ); } }