如果有人可以帮助我解决这个问题。因此,我可以使用以下代码获取并插入到dropdownbuttons中。如果我选择第一个下拉列表,则列表将为第二个下拉列表显示相应的内容;如果我选择另一个值,则列表将更改。但是,当我在列表之间多次选择时,会给我一个错误,例如:
引发了另一个异常:应该只有[DropdownButton]值的一项是软膏。
检测到零个或两个或两个以上具有相同值的[DropdownButton]。
我认为这是因为我正在调用按钮的onChanged:内部的函数。任何帮助将非常感激。谢谢!
注意:我还只将dynamicDropDownMainCategory()函数放在initState中。
//FIRST DROPDOWNBUTTON BELOW
//
child: DropdownButton<String>(
hint: Text('Select Category'),
icon: Icon(Icons.keyboard_arrow_down),
iconSize: 28,
isDense: true,
isExpanded: true ,
elevation: 16,
style: TextStyle(
color: Colors.black,
fontSize: 16.0,
),
value: categoryManualCurrent.isNotEmpty ? categoryManualCurrent : null,
onChanged: (String categoryValue) async {
// await dynamicDropDownMainCategory();
setState(() {
mainCategoryCurrent = categoryValue;
categoryManualCurrent = categoryValue;
});
print('THIS' + categoryManual.toString());
print('THAT' + subCategoryManual.toString());
await dynamicDropDownSubCategory();
},
items: categoryManual.toList()
.map((var value3) {
return DropdownMenuItem<String>(
value: value3,
child: Text(value3),
);
}).toList(),
),
)
],
),
//SECOND DROPDOWNBUTTON BELOW
//
child: DropdownButton<String>(
hint: Text('Select subCategory'),
icon: Icon(Icons.keyboard_arrow_down),
iconSize: 28,
isDense: true,
isExpanded: true ,
elevation: 16,
style: TextStyle(
color: Colors.black,
fontSize: 16.0,
),
value: subCategoryManualCurrent.isNotEmpty ? subCategoryManualCurrent : null,
onChanged: (String subCategoryValue) async {
//await dynamicDropDownMainCategory();
await dynamicDropDownSubCategory();
subCategoryCurrent = subCategoryValue;
setState(() {
subCategoryManualCurrent = subCategoryValue;
});
// await dynamicDropDownSubCategory();
},
items: subCategoryManual.toList()
.map((var value1) {
return DropdownMenuItem<String>(
value: value1,
child: Text(value1),
);
}).toList(),
),
),
]
),
//TWO functions im using to call the list data from firestore and insert into the //dropdownbutton
Future dynamicDropDownMainCategory() async{
await Firestore.instance
.collection('Products')
.document('Categories')
.get()
.then((snapshot) => {
categoryManual = (snapshot.data['mainCategory']),
}
);
}
Future dynamicDropDownSubCategory() async{
await Firestore.instance
.collection('Products')
.document('Categories')
.get()
.then((snapshot) => {
if (mainCategoryCurrent == categoryManualCurrent){
subCategoryManual = (snapshot.data['subCategory'+' '+mainCategoryCurrent]),
} else {
subCategoryManual = ['Error Getting Data'],
}
}
);
}
答案 0 :(得分:1)
当您有两个相等的字符串并且将其设置为dropdowmbutton的值时,会发生此错误,因为它必须是唯一的:
return DropdownMenuItem(
value: data.categoryName,
child: Text(data.categoryName, style: Constants.normalLarge),
);
在上面的示例中,value属性必须是唯一的,以便它可以呈现适当的项目。
答案 1 :(得分:0)
之所以会这样,是因为相关列表的大小不同, 因此,基本上父级1的依赖下拉列表包含4个元素,因此您选择了最后一个[索引3]。然后,您更改为具有2个具有3个元素的从属dd的父级2,发生的事情是,dependat下拉列表中的索引3仍然是因为您仅更改了父级,并且由于与父级2相关的dd仅进入索引2,因此会出现此错误
希望我有所帮助。