boxchecker/lib/add_form.dart

99 lines
2.8 KiB
Dart

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<StatefulWidget> createState() => _AddFormState(type);
}
class _AddFormState extends State<AddForm> {
_AddFormState(this.type);
final _formKey = GlobalKey<FormState>();
final data.Page type;
int _templatChoice = -1;
List<data.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<DropdownMenuItem<int>> generateDropdown() {
loadTemplates();
List<DropdownMenuItem<int>> items = [
DropdownMenuItem<int>(child: Text("None"), value: -1)
];
templates.asMap().forEach((index, value) {
items.add(DropdownMenuItem<int>(
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(
onFieldSubmitted: (value) {
FocusScope.of(context).requestFocus(_TemplateFocusNode);
},
decoration: const InputDecoration(labelText: 'Label')),
DropdownButtonFormField<int>(
focusNode: _TemplateFocusNode,
value: _templatChoice,
onChanged: (value) {
setState() {
_templatChoice = (value != null) ? value : -1;
}
},
decoration:
const InputDecoration(labelText: "Starting Template"),
items: generateDropdown(),
)
],
),
),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.save_alt),
onPressed: () {
// TODO implement adding list to database
Navigator.pop(context); // TODO replace route with checklist page
},
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
);
}
}