Flutter 下拉按钮表单字段错误 - 有两个下拉菜单
Flutter dropdown button form field error - with two dropdown
刚接触flutter编程,遇到一个问题,在论坛看了很多,还是没有解决。
我有两个类,一个省和一个市,每个都是通过API查询得到的。
首先,我获取了具有网络服务的省份。我和 futurebuilder 一起安装了各省的下拉菜单。
一旦省份被 selected,并且通过我们传递省份的另一个网络服务,我们通过不同的网络服务获得城市。
我使用 FutureBuilder 创建了包含所请求省份城市的下拉列表。
一切似乎都是正确的....但是一旦我有了城市列表,如果我们select一个省份而不是selected,我会收到以下错误:
============================================= ================================================
应该只有一项具有 [DropdownButton] 的值: 'Municipio' 的实例。
检测到零个或两个或更多 [DropdownMenuItem] 具有相同的值
'package:flutter/src/material/dropdown.dart':
断言失败:第 803 行第 15 行:'items == null || items.isEmpty ||价值==空||
items.where((DropdownMenuItem 项目) {
return 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();
});
感谢我们的帮助¡¡¡
我的解决方案是将 DropdownButtonFormField 更改为 DropdownButton。
从那里开始一切正常。
刚接触flutter编程,遇到一个问题,在论坛看了很多,还是没有解决。
我有两个类,一个省和一个市,每个都是通过API查询得到的。
首先,我获取了具有网络服务的省份。我和 futurebuilder 一起安装了各省的下拉菜单。
一旦省份被 selected,并且通过我们传递省份的另一个网络服务,我们通过不同的网络服务获得城市。
我使用 FutureBuilder 创建了包含所请求省份城市的下拉列表。
一切似乎都是正确的....但是一旦我有了城市列表,如果我们select一个省份而不是selected,我会收到以下错误:
============================================= ================================================
应该只有一项具有 [DropdownButton] 的值: 'Municipio' 的实例。
检测到零个或两个或更多 [DropdownMenuItem] 具有相同的值 'package:flutter/src/material/dropdown.dart':
断言失败:第 803 行第 15 行:'items == null || items.isEmpty ||价值==空|| items.where((DropdownMenuItem 项目) {
return 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();
});
感谢我们的帮助¡¡¡
我的解决方案是将 DropdownButtonFormField 更改为 DropdownButton。
从那里开始一切正常。