Ошибка поля формы кнопки выпадения флаттера - с двумя выпадающими - PullRequest
0 голосов
/ 11 апреля 2020

Я новичок в программировании с флаттером, и возникла проблема, что, прочитав много на этом форуме, мне не удалось решить.

У меня есть два класса, одна провинция и другие города, каждый из них получен через запрос 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();
    });

Спасибо за помощь ¡¯ ¡

1 Ответ

0 голосов
/ 15 апреля 2020

Решением для меня было изменить DropdownButtonFormField на DropdownButton.

Оттуда все работало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...