import 'package:flutter/material.dart'; import 'data_util.dart' as data; import 'db_helper.dart'; class AddForm extends StatefulWidget { const AddForm({Key? key, required this.type}) : super(key: key); final data.Page type; @override State createState() => _AddFormState(type); } class _AddFormState extends State { _AddFormState(this.type); final _formKey = GlobalKey(); final data.Page type; int _templatChoice = -1; String _listLabel = ""; List templates = []; final FocusNode _TemplateFocusNode = FocusNode(); void loadTemplates() async { var rows = await DBHelper.dbHelper.getAllLists(data.Page.templates); setState(() { templates.clear(); for (var row in rows) { var template = data.List.fromMap(row); templates.add(template); } }); } List> generateDropdown() { loadTemplates(); List> items = [ DropdownMenuItem(child: Text("None"), value: -1) ]; templates.asMap().forEach((index, value) { items.add(DropdownMenuItem( child: Text(value.name), value: index, )); }); return items; } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text( 'Add ' + ((type == data.Page.lists) ? 'Check List' : (type == data.Page.templates) ? 'Template' : ''), ), ), body: Container( margin: const EdgeInsets.all(10), child: Form( key: _formKey, child: Column( children: [ TextFormField( onChanged: (value) { _listLabel = value; }, validator: (value) { if (value == null || value.isEmpty) { return 'Label is required'; } return null; }, onFieldSubmitted: (value) { if (_formKey.currentState!.validate()) { FocusScope.of(context).requestFocus(_TemplateFocusNode); } }, decoration: const InputDecoration(labelText: 'Label')), DropdownButtonFormField( focusNode: _TemplateFocusNode, value: _templatChoice, onChanged: (value) => setState(() { _templatChoice = value!; }), decoration: const InputDecoration(labelText: "Starting Template"), items: generateDropdown(), ) ], ), ), ), floatingActionButton: FloatingActionButton( child: Icon(Icons.save_alt), onPressed: () async { if (_formKey.currentState!.validate()) { int id = await DBHelper.dbHelper.insertList( data.List( _listLabel, isTemplate: type.index == 1, // TODO Add description to lists ), ); if (_templatChoice >= 0 && _templatChoice < templates.length) { DBHelper.dbHelper.copyList(templates[_templatChoice].id!, id); } Navigator.pop(context); // TODO replace route with checklist page } }, ), floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, ); } }