Tenho uma tela para cadastrar um novo gasto. Nessa tela, tem um dropdown pra selecionar a categoria do gasto.
Acontece que, ao selecionar uma categoria e, em seguida, dar Hot Reload, dá erro.
Note que o erro fala que existem mais de um DropdownMenuItem com o mesmo valor: o objeto do tipo Categoria que havia sido selecionado antes do hot reload. Note também que esse erro não é gerado caso nenhuma categoria tenha sido selecionada antes de efetuar o hot reload.
A seguir o código da classe referente ao dropdown + o indicador da cor da categoria selecionada:
import 'package:bytebank/models/categoria.dart';
import 'package:flutter/material.dart';
import 'package:flutter_colorpicker/flutter_colorpicker.dart';
class SeletorCategoria extends StatefulWidget {
final List<Categoria> categorias = [
Categoria('Bebida', Colors.red),
Categoria('Comida', Colors.blue),
Categoria('Carro', Colors.green),
];
SeletorCategoria({Key? key}) : super(key: key);
@override
State<StatefulWidget> createState() {
return SeletorCategoriaState();
}
}
class SeletorCategoriaState extends State<SeletorCategoria> {
Categoria? dropdownValue;
late Color selectedColor = Theme.of(context).scaffoldBackgroundColor;
@override
Widget build(BuildContext context) {
return Row(
children: [
Flexible(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: DropdownButtonHideUnderline(
child: DropdownButtonFormField<Categoria>(
value: dropdownValue,
style: const TextStyle(fontSize: 24.0),
items: widget.categorias.map((categoria) {
return DropdownMenuItem<Categoria>(
value: categoria,
child: Padding(
padding: const EdgeInsets.only(left: 8.0),
child: Text(categoria.name),
),
);
}).toList(),
onChanged: (categoria) {
setState(() {
dropdownValue = categoria!;
selectedColor = categoria.color;
});
},
isExpanded: true,
decoration: const InputDecoration(
labelText: 'Categoria',
labelStyle: TextStyle(fontSize: 24.0),
alignLabelWithHint: true,
border: OutlineInputBorder(),
),
),
),
),
),
Padding(
padding: const EdgeInsets.all(16.0),
child: ColorIndicator(HSVColor.fromColor(selectedColor)),
),
],
);
}
}
Alguém saberia explicar o motivo desse erro estar acontecendo e uma possível solução?
Grato.