Я новичок в программировании с флаттером, и возникла проблема, что, прочитав много на этом форуме, мне не удалось решить.
У меня есть два класса, одна провинция и другие города, каждый из них получен через запрос API.
Сначала я получаю провинции с помощью веб-сервисов. и я устанавливаю вместе с будущим строителем выпадающий список с провинциями.
Как только провинция выбрана, и через другой веб-сервис, в который мы передаем провинцию, мы получаем города через другой веб-сервис.
и с помощью FutureBuilder я создаю раскрывающийся список с городами запрашиваемой провинции.
Все кажется правильным .... но как только у меня будет список городов, если мы выберем провинцию, отличную от выбранной Я получаю следующую ошибку:
==================================== ================================================== ======
Должен быть ровно один элемент со значением [DropdownButton]: Экземпляр 'Municipio'.
Обнаружен либо ноль, либо 2, либо более [DropdownMenuItem]. с тем же значением 'package: flutter / src / material / dropdown.dart':
Неудачное утверждение: строка 803, позиция 15: 'items == null || items.isEmpty || значение == ноль || items.where ((DropdownMenuItem item) {
return item.value == value;}). length == 1 '
============= ================================================== ==============================
@override
void initState() {
_provincias = provinciasProvider.getProvincias();
super.initState();
}
Widget _dropDownProvincias() {
return FutureBuilder(
future: _provincias,
builder: (context, snapshot) {
if (snapshot.hasError) return Text(snapshot.error);
if (snapshot.hasData) {
return DropdownButtonFormField(
isExpanded: false,
isDense: true,
decoration: new InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.greenAccent, width: 5.0),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.teal, width: 1.0),
),
labelText: 'Seleccione Provincia',
labelStyle: TextStyle(color: Colors.black),
//icon: Icon(Icons.language)
), //, color: Colors.white10
items: snapshot.data
.map<DropdownMenuItem<Provincia>>((Provincia provincia) {
return DropdownMenuItem<Provincia>(
value: provincia,
child: Text(provincia.nombreProvincia,
style: TextStyle(color: Color.fromRGBO(58, 66, 46, .9))),
);
}).toList(),
onChanged: (Provincia newValue) {
setState(() {
selectedProvincia = newValue;
codigoProvinciaSeleccionada = newValue.codigoProvincia;
nombreProvinciaSeleccionada = newValue.nombreProvincia;
_municipios = municipiosProvider
.getMunicipios(codigoProvinciaSeleccionada);
});
print(codigoProvinciaSeleccionada);
print(newValue.nombreProvincia);
},
);
}
return Container();
});
Widget _dropDownPoblacion(String codigoProvinciaSeleccionada) {
return FutureBuilder(
future: _municipios,
builder: (context, snapshot) {
if (snapshot.hasError) return Text(snapshot.error);
if (snapshot.hasData) {
return DropdownButtonFormField(
isExpanded: true,
isDense: true,
decoration: new InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.greenAccent, width: 5.0),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.teal, width: 1.0),
),
labelText: 'Seleccione Localidad',
labelStyle: TextStyle(color: Colors.black),
//icon: Icon(Icons.language)
), //, color: Colors.white10
items: snapshot.data
.map<DropdownMenuItem<Municipio>>((Municipio municipio) {
return DropdownMenuItem<Municipio>(
value: municipio,
child: Text(municipio.nombreMunicipio,
style: TextStyle(color: Color.fromRGBO(58, 66, 46, .9))),
);
}).toList(),
onChanged: (Municipio newValue) {
setState(() => selectedMunicipio = newValue);
codigomunicipioSeleccionado = newValue.codigoMunicipio;
nombreMunicipioSeleccionado = newValue.nombreMunicipio;
print(codigomunicipioSeleccionado);
print(newValue.nombreMunicipio);
},
);
}
return Container();
});
Спасибо за помощь ¡¯ ¡