在flutter开发中,你经常会用到下拉框的选择,而且会出现多级联动。何为多级联动?那就是一个下拉框的选择内容,是另外一个下拉框数据的先决查询条件,对这个下拉框中的数据起到决定性作用,以此类推。
首先,我们先看下两个DropdownButton的代码:
Container(
padding: EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(20)),
height: 60.0,
child: DropdownButton(
isExpanded: true,
value: isCourseValue,
items: _CourseNameList.map((item){
return DropdownMenuItem(
child: Text(item),
value: item,
);
}).toList(),
onChanged: (value){
setState(() {
isCourseValue = value;//一级
});
},
),
),
Container(
padding: EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(20)),
height: 60.0,
child: DropdownButton(
isExpanded: true,
value: isChapterValue,
items: _ChapterNameList2[isCourseValue].map((item){
return DropdownMenuItem(
child: Text(item['title']),
value: item['title'],
);
}).toList(),
onChanged: (value){
},
),
),
本次我出现的问题是,当点击第一、二个DropdownButton后,选择其中的内容,在回来点击第一个DropdownButton,会出现如下的错误:
I/flutter (20998): The following assertion was thrown building AdoptionInput(dirty, state: AdoptionInputState#3cc80):
I/flutter (20998): 'package:flutter/src/material/dropdown.dart': Failed assertion: line 481 pos 15: 'value == null ||
I/flutter (20998): items.where((DropdownMenuItem<T> item) => item.value == value).length == 1': is not true.
由于_ChapterNameList2中的List由第一个DropdownButton点击后决定,所以当2个DropdownButton选择完后,再次点击第一个DropdownButton,会出现如上的错误。
根据上述的错误,我们可以发现,是DropdownButton中的value或者是填充元素的数组等于或小于1。解决方案:如果是由于value值出现问题,那么在重置_ChapterNameList2的list时,需要对value赋值为null,才不会出现那样的错误;如果是填充元素的数组等于或小于1的情况,可以做个if判断,当满足要填充的元素大于1时,才进行赋值或将原有DropdownButton中的_ChapterNameList2数组清楚,再通过add方法添加。
评论区