侧边栏壁纸
  • 累计撰写 29 篇文章
  • 累计创建 18 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

DropdownButton二级联动的一些心得

bsdlzg
2022-10-20 / 0 评论 / 0 点赞 / 144 阅读 / 488 字

    在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方法添加。

0

评论区