//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'],
}
}
);
}
У меня есть две выпадающие кнопки, в которых список второго выпадающего списка зависит от состояния первого. То есть, учитывая выбор в первом раскрывающемся списке, список во втором раскрывающемся списке должен измениться и отобразиться. Я вызываю массивы из firebase и сохраняю их в виде списков для перехода в пункты выпадающего меню для этой цели.
Теперь, когда я выбираю определенное значение в первом раскрывающемся списке, я получаю нулевое значение во втором раскрывающемся меню. (Имеется в виду отсутствие элементов в списке). Если я сделаю тот же выбор в первом раскрывающемся списке снова, я получу желаемый список во втором раскрывающемся списке. Может кто-нибудь, пожалуйста, помогите мне объяснить причину этой проблемы?
Кроме того, если вы делаете другой выбор после первого выбора в раскрывающемся списке, даже это должно быть сделано дважды, в этом случае я получаю ошибку , сказав, что ожидался только один позиционный аргумент, но два были получены.
Я использую Futures и asyn c и жду всех своих функций и вызовов. Так что любая причина задержки кажется маловероятной. Любая помощь по этому вопросу высоко ценится.
Ссылка: Это расширение кейса: Flutter - Зависимый / многоуровневый DropdownButton имеет проблему: должен быть ровно один элемент со значением [DropdownButton]: Мази