Flutter 颤振下拉按钮表单字段错误-有两个下拉按钮
我是一个新的编程与颤振,出现了一个问题,在阅读了很多在这个论坛,我还没有设法解决 我有两个类,一个省和另一个市,每个都是通过API查询获得的 首先,我用一个webservices获取各省。我和一个未来的建设者一起登上了与各省的下拉列表 一旦选择了该省,并通过我们传递该省的另一个web服务,我们就可以通过不同的web服务获得这些城市 我用一个FutureBuilder创建了一个下拉列表,其中包含了被请求省份的城市 一切似乎都是正确的。。。。但是一旦我有了城市列表,如果我们选择了一个省而不是所选的省,我会得到以下错误: =============================================================================================Flutter 颤振下拉按钮表单字段错误-有两个下拉按钮,flutter,dart,drop-down-menu,runtime-error,future,Flutter,Dart,Drop Down Menu,Runtime Error,Future,我是一个新的编程与颤振,出现了一个问题,在阅读了很多在这个论坛,我还没有设法解决 我有两个类,一个省和另一个市,每个都是通过API查询获得的 首先,我用一个webservices获取各省。我和一个未来的建设者一起登上了与各省的下拉列表 一旦选择了该省,并通过我们传递该省的另一个web服务,我们就可以通过不同的web服务获得这些城市 我用一个FutureBuilder创建了一个下拉列表,其中包含了被请求省份的城市 一切似乎都是正确的。。。。但是一旦我有了城市列表,如果我们选择了一个省而不是所选的省
@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();
});
应该只有一个项目具有[DropdownButton]的值:“市政”实例
检测到零个或2个或更多具有相同值的[DropdownMenuItem]
“包装:颤振/src/material/dropdown.dart”:
断言失败:第803行第15位:“items==null | | items.isEmpty | value==null||
项目。其中((DropdownMenuItem项目){
返回项。值==值;
}).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();
});
@覆盖
void initState(){
_provincias=provinciasProvider.getProvincias();
super.initState();
}
小部件_dropDownProvincias(){
回归未来建设者(
未来:_provincias,
生成器:(上下文,快照){
if(snapshot.hasrerror)返回文本(snapshot.error);
if(snapshot.hasData){
返回DropdownButtonFormField(
isExpanded:错,
是的,
装饰:新的输入装饰(
聚焦顺序:大纲输入边框(
borderSide:borderSide(颜色:Colors.greenAccent,宽度:5.0),
),
enabledBorder:OutlineInputBorder(
borderSide:borderSide(颜色:Colors.teal,宽度:1.0),
),
标签文字:“Seleccione Provincia”,
标签样式:文本样式(颜色:Colors.black),
//图标:图标(Icons.language)
),/,颜色:Colors.white10
项目:snapshot.data
.地图((省){
返回下拉菜单项(
价值:provincia,
子项:文本(provincia.nombreProvincia,
样式:TextStyle(颜色:color.fromRGBO(58,66,46,9)),
);
}).toList(),
变更后:(Provincia newValue){
设置状态(){
selectedProvincia=新值;
CodigoProvinciselectionada=newValue.codigoProvincia;
nombreprovinciaselectionada=newValue.nombreProvincia;
_市政服务提供者
.getMunicipios(CodigoProvincialeccionada);
});
打印(CodigoProvinciaselectionada);
印刷品(newValue.nombreProvincia);
},
);
}
返回容器();
});
小部件_dropdownpobalacion(字符串codigoprovincialeccionada){
回归未来建设者(
未来:_市政,
生成器:(上下文,快照){
if(snapshot.hasrerror)返回文本(snapshot.error);
if(snapshot.hasData){
返回DropdownButtonFormField(
是的,
是的,
装饰:新的输入装饰(
聚焦顺序:大纲输入边框(
borderSide:borderSide(颜色:Colors.greenAccent,宽度:5.0),
),
enabledBorder:OutlineInputBorder(
borderSide:borderSide(颜色:Colors.teal,宽度:1.0),
),
标签文字:“Seleccione Localidad”,
标签样式:文本样式(颜色:Colors.black),
//图标:图标(Icons.language)
),/,颜色:Colors.white10
项目:snapshot.data
.地图((市政){
返回下拉菜单项(
价值:市政,
子项:文本(municipio.nombreMunicipio,
样式:TextStyle(颜色:color.fromRGBO(58,66,46,9)),
);
}).toList(),
变更后:(市政新价值){
设置状态(()=>selectedMunicipio=newValue);
Codigomunicipioselecionado=newValue.Codigomunicipo;
nombremunicipioselecionado=newValue.nombreMunicipio;
印刷品(Codigomunicioseleccionado);
打印(newValue.nombreMunicipio);
},
);
}
返回容器();
});
感谢我们的帮助我的解决方案是将DropdownButtonFormField更改为DropdownButton
从那以后,一切都正常了。这些可能会对您有所帮助:,谢谢,我查看了此链接,但没有解决我的问题的方法,