Drop down menu 下拉菜单上的重置值(颤振)

Drop down menu 下拉菜单上的重置值(颤振),drop-down-menu,dart,flutter,Drop Down Menu,Dart,Flutter,我有两个下拉列表,分别是州和城市,基本上当用户选择一个州时,它会自动设置该州的城市值。当我选择州时,会出现城市下拉列表,在我选择城市后,如果我想重新更改州,它会给出错误信息 “引发了另一个异常:'package:flatter/src/material/dropdown.dart':失败的断言:第513行位置15:'items==null | | | value==null | | items。其中((DropdownMenuItem)=>item.value==value)。length==1

我有两个下拉列表,分别是州和城市,基本上当用户选择一个州时,它会自动设置该州的城市值。当我选择州时,会出现城市下拉列表,在我选择城市后,如果我想重新更改州,它会给出错误信息

“引发了另一个异常:'package:flatter/src/material/dropdown.dart':失败的断言:第513行位置15:'items==null | | | value==null | | items。其中((DropdownMenuItem)=>item.value==value)。length==1':不正确。”

列表状态=[
“吉隆坡”,
“雪兰莪”,
“柔佛”,
“基达”,
“吉兰丹”,
“马六甲”,
“Negeri Sembilan”,
“彭亨”,
“槟城”,
“霹雳州”,
“佩利斯”,
“沙巴”,
“沙捞越”,
“丁加努”
];
列表kl=[
“安邦·希利尔”,
“班达尔达迈佩尔达纳”,
“孟加拉邦”,
“萨拉坦塔西克班达尔”,
“邦萨”,
“邦萨南部”];
列表选择=[
“安邦”,
“Ara Damansara”,
“巴拉贡”,
“班达尔布吉拉贾”,
“班达尔金拉拉”,
“普特里浦中班达尔”,
“Bandar Sunway”,
“班达尔乌塔马镇,];
@凌驾
void initState(){
super.initState();
_DropDownMenuState=getDropDownMenuState();
}
列表getDropDownMenuState(){
列表状态1=新列表();
for(状态为的字符串状态列表){
状态1.add(
新的DropdownMenuItem(值:statelist,子项:新文本(statelist));
}
返回状态1;
}
列表getDropDownMenuKL(){
List kl1=新列表();
for(字符串kllist以kl表示){
添加(新的下拉菜单项(值:kllist,子项:新文本(kllist));
}
返回kl1;
}
列表getDropDownMenuSEL(){
List sel1=新列表();
for(sel中的字符串列表){
添加(新的下拉菜单项(值:sellist,子项:新文本(sellist));
}
返回sel1;
}
扩大(
孩子:物理模型(
边界半径:
新边界半径。圆形(50.0),
颜色:颜色,白色,
子容器:新容器(
填充:仅限边缘设置(
左:10.0,右:10.0),
身高:40.0,
装饰:新盒子装饰(
边界半径:
新边界半径
.通告(50.0),
边界:新边界(
宽度:3.0,
颜色:颜色。灰色[300],
)),
孩子:新安装的盒子(
适合:BoxFit.contain,
孩子:下拉按钮(
提示:新文本(
所有翻译
.text(“城市”),
值:_currentCity,
项目:_下拉菜单,
一旦更改:
改变城市,
),
))),
),
大小盒子(
宽度:10.0,
),
扩大(
孩子:物理模型(
边界半径:
新边界半径。圆形(50.0),
颜色:颜色,白色,
子容器:新容器(
填充:仅限边缘设置(
左:10.0,右:10.0),
身高:40.0,
装饰:新盒子装饰(
边界半径:
新边界半径
.通告(50.0),
边界:新边界(
宽度:3.0,
颜色:颜色。灰色[300],
)),
孩子:新安装的盒子(
适合:BoxFit.contain,
孩子:下拉按钮(
提示:新文本(
所有翻译
.text(“state”),
值:_currentState,
项目:_下拉菜单自定义,
一旦更改:
changedDropDownState,
),
))),
),
void changedDropDownState(字符串selectedState){
设置状态(){
_currentState=所选状态;
if(selectedState.toString()=“吉隆坡”){
_dropDownMenuCity=getDropDownMenuKL();
}else if(selectedState.toString()=“雪兰莪”){
_dropDownMenuCity=getDropDownMenuSEL();}
});
}
void changedDropDownCity(字符串selectedCity){
设置状态(){
_currentCity=所选城市;
});
}

在设置新的城市列表之前,需要清除当前城市。 因为
下拉按钮
项目中等待有效的
(\u currentCity)

void changedDropDownState(字符串selectedState){
设置状态(){

//我也遇到了同样的问题,所以这里是我能够找到的解决方案。我使用flatter\u form\u builder库,下面是我解决问题的方法:

   List<String> _items = [];
   GlobalKey<FormBuilderState> _fbKey;


   FormBuilder(
                key: _fbKey,
                child: Column(
                  children: <Widget>[
                    FormBuilderDropdown(
                        attribute: "type",                            
                        onChanged: (val) {
                          setState(() {
                            /// Ici nous récuperons ledit DropDown afin de le
                            /// reset sinon l'erreur de same value va être lancé
                            final length =
                                _fbKey.currentState.fields.values.length;
                            _fbKey.currentState.fields.values
                                .elementAt(length - 1) /// Widget position
                                .currentState
                                .reset();
                            
                            if (val == "x") {
                              _items = ["1", "2"];
                            } else {
                              _items = ["10", "11"];
                            }
                          });
                        },
                        
                        items: ["x","y"].map((cpt) {
                          return DropdownMenuItem(
                              value: cpt, 
                              child: Text("$cpt"));
                        }).toList()),
                    SizedBox(height: 20),
                    FormBuilderDropdown(
                        attribute: "number",                                                                                                                                           
                        items: _items.map((cpt) {
                          return DropdownMenuItem(
                              value: cpt, child: Text("$cpt"));
                        }).toList())]))
列出_项=[];
GlobalKey_fbKey;
造模工(
键:fbKey,
子:列(
儿童:[
FormBuilderDropdown(
属性:“类型”,
一旦更改:(val){
设置状态(){
///我们的爱神杯将它带到了一个地方
///重置相同价值价值的西农银行
最终长度=
_fbKey.currentState.fields.values.length;
_fbKey.currentState.fields.values
.elementAt(长度-1)///小部件位置
.当前状态
.reset();
如果(val=“x”){
_项目=[“1”、“2”];
}否则{
_项目=[“10”、“11”];
}
});
},
项目:[“x”,“y”]地图((cpt){
返回下拉菜单项(
价值:cpt,
子项:文本(“$cpt”);
}).toList()),
尺寸箱(高度:20),
FormBuilderDropdown(
属性:“数字”,
void changedDropDownState(String selectedState) {
setState(() {
  // <<<
  _dropDownMenuCity = null;
  _currentCity = null;
  // <<<

  _currentState = selectedState;

  if (selectedState.toString() == "Kuala Lumpur") {
    _dropDownMenuCity = getDropDownMenuKL();
  } else if (selectedState.toString() == "Selangor") {
    _dropDownMenuCity = getDropDownMenuSEL();
  }
});
   List<String> _items = [];
   GlobalKey<FormBuilderState> _fbKey;


   FormBuilder(
                key: _fbKey,
                child: Column(
                  children: <Widget>[
                    FormBuilderDropdown(
                        attribute: "type",                            
                        onChanged: (val) {
                          setState(() {
                            /// Ici nous récuperons ledit DropDown afin de le
                            /// reset sinon l'erreur de same value va être lancé
                            final length =
                                _fbKey.currentState.fields.values.length;
                            _fbKey.currentState.fields.values
                                .elementAt(length - 1) /// Widget position
                                .currentState
                                .reset();
                            
                            if (val == "x") {
                              _items = ["1", "2"];
                            } else {
                              _items = ["10", "11"];
                            }
                          });
                        },
                        
                        items: ["x","y"].map((cpt) {
                          return DropdownMenuItem(
                              value: cpt, 
                              child: Text("$cpt"));
                        }).toList()),
                    SizedBox(height: 20),
                    FormBuilderDropdown(
                        attribute: "number",                                                                                                                                           
                        items: _items.map((cpt) {
                          return DropdownMenuItem(
                              value: cpt, child: Text("$cpt"));
                        }).toList())]))