Выпадающий список с картой в Flutter

#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’.