class PrescricaoForm extends StatefulWidget {
const PrescricaoForm({Key? key, required this.formContext}):super(key:key);
final BuildContext formContext;
@override
State<StatefulWidget> createState() {
return _PrescricaoFormState();
}
}
class _PrescricaoFormState extends State<PrescricaoForm> {
final _formKey = GlobalKey<FormState>();
// Controlador para a quantidade
final TextEditingController quantidadeTextController = TextEditingController();
// Lista de produtos
List<Produto> itens = [
Produto("AD+", "Bayer", "L"),
Produto("Iodofórmio", "Novacort", "g"),
];
Produto? _produtoSelecionado;
double _quantidade = 0.0;
@override
Widget build(BuildContext context) {
_produtoSelecionado ??= itens.first;
return Scaffold(
appBar: AppBar(
title: Text("Inserir Produto"),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// DropdownButtonFormField para selecionar produto
DropdownButtonFormField<Produto>(
value: _produtoSelecionado,
items: itens.map((Produto produto) {
return DropdownMenuItem<Produto>(
value: produto,
child: Text(produto.nome+":"+produto.fabricante),
);
}).toList(),
decoration: InputDecoration(labelText: 'Selecione um produto'),
onChanged: (Produto? novoProduto) {
setState(() {
_produtoSelecionado = novoProduto;
});
},
validator: (value) {
if (value == null) {
return 'Por favor, selecione um produto';
}
return null;
},
),
SizedBox(height: 16),
// Linha com campo de quantidade e unidade de medida
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
// Campo de quantidade
Expanded(
child: TextFormField(
controller: quantidadeTextController,
decoration: InputDecoration(
labelText: 'Quantidade',
border: OutlineInputBorder(),
),
keyboardType: TextInputType.number,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Por favor, insira a quantidade';
}
if (double.tryParse(value) == null) {
return 'Por favor, insira um número válido';
}
return null;
},
),
),
SizedBox(width: 16),
// Texto da unidade de medida
Text(
_produtoSelecionado!.unidadeMedida,
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
],
),
SizedBox(height: 16),
// Botão para salvar ou retornar
ElevatedButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
// Exibe um SnackBar com o produto e quantidade selecionados
Prescricaoinherited.of(widget.formContext)
.addProduto(_produtoSelecionado!, 12.0);//double.tryParse(quantidadeTextController.text)!);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'Produto: ${_produtoSelecionado!.nome}, Quantidade: ${quantidadeTextController.text} ${_produtoSelecionado!.unidadeMedida}',
),
),
);
// Retorna para a tela anterior
Navigator.pop(widget.formContext);
}
},
child: Text("Salvar e Retornar"),
),
],
),
),
),
);
}
}