#flutter #dart
#flutter #dart
Вопрос:
Я хочу заполнить два выпадающих списка с этой карты:
var jobs = {
"departments": ["dep1", "dep2", "dep3"],
"dep1": ["job1", "job2"],
"dep2": ["job3", "job4"],
"dep3": ["job5", "job6"]
};
Выпадающая кнопка 1 (отделы)
DropdownButton(
hint: Text(hint1),
value: chosenDep,
items: jobs['departments']
.map((e) => DropdownMenuItem(child: Text(e), value: e,))
.toList(),
onChanged: (value){
setState({
isDepChosen= true;
chosenDep = value;
});
)
Выпадающая кнопка 2 (задания)
if(isDepChosen)
DropdownButton(
hint: Text(hint2),
value: chosenJob,
items: jobs[chosenDep] // here i select key of map with chosen department
.map((e) => DropdownMenuItem(child: Text(e), value: e,))
.toList(),
onChanged: (value){
setState({
chosenJob = value;
});
)
Но я получаю эту ошибку, когда выбираю что-либо из второго меню и изменяю значение первого меню:
Assertion failed: file:///home/koha/flutter/packages/flutter/lib/src/material
/dropdown.dart:1473:15
items == null || items.isEmpty || value == null ||
items.where((DropdownMenuItem<T> item) {
return item.value == value;
}).length == 1
"There should be exactly one item with [DropdownButton]'s value: job1. nEither zero or 2 or
more [DropdownMenuItem]s were detected with the same value"
Ответ №1:
Вы меняете первое, вы должны изменить второе значение на значение по умолчанию.
Например.
DropdownButton(
hint: Text(hint1),
value: chosenDep,
items: jobs['departments']
.map((e) => DropdownMenuItem(child: Text(e), value: e,))
.toList(),
onChanged: (value){
setState({
isDepChosen= true;
chosenDep = value;
chosenJob = jobs[chosenDep].first;
});
)
Ответ №2:
Вы меняете элементы из второго выпадающего списка, но ваша переменная ‘chosenJob’ имеет значение из старого списка элементов. Очищайте содержимое ‘chosenJob’ при изменении переменной ‘chosenDep’.