Flutter下拉按钮表单字段错误-有两个下拉列表

问题描述 投票:0回答:1

我不熟悉如何进行波动编程,并且出现了一个问题,在这个论坛上阅读了很多之后,我还没有解决。

我有两个类,一个省和另一个城市,每个类都是通过API查询获得的。

首先,我通过网络服务获得了省份。然后我与Futurebuilder一起安装了各省的下拉菜单。

一旦选择了省份,并通过我们将省份传递到的另一个Web服务,我们将通过其他Web服务获得城市。

并且使用FutureBuilder,我用请求的省份的城市创建下拉列表。

一切似乎都正确....但是一旦有了城市列表,如果我们选择的省份不是选定的省份,则会出现以下错误:

================================================ ============================================>

应该只有一个具有[DropdownButton]值的项目:“ Municipio”的实例。

零个或两个或多个[DropdownMenuItem] s被检测为相同的值'package:flutter / src / material / dropdown.dart':

失败的断言:803行pos 15:'items == null || items.isEmpty ||值== null ||items.where(((DropdownMenuItem item){

返回item.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();
    });

感谢我们的帮助……

我对使用Flutter编程非常陌生,并且出现了一个问题,在这个论坛上阅读了很多之后,我还没有解决。我有两个班级,一个省和另一个城市,每个...

flutter dart drop-down-menu runtime-error future
1个回答
0
投票

对我来说,解决方案是将DropdownButtonFormField更改为DropdownButton。

从那里开始一切正常。

© www.soinside.com 2019 - 2024. All rights reserved.