#flutter #dart
Вопрос:
У меня есть карта<динамическая, строковая> с единицами измерения и именами.
Map timeUnits = <dynamic, String>{
TimeUnit.second: 'second',
TimeUnit.minute: 'minute',
TimeUnit.hour: 'hour',
TimeUnit.day: 'day',
TimeUnit.week: 'week',
TimeUnit.month: 'month',
TimeUnit.calendarYear: 'year',
};
Как добавить строку в раскрывающуюся кнопку? Кнопка раскрывающегося списка показывает эту проблему «Тип аргумента» Карта<динамическая, динамическая> «не может быть присвоен типу параметра «Список»».
Код раскрывающейся кнопки:
child: DropdownButton(
isExpanded: true,
underline: Container(),
value: currentUnits[widget.convertorType],
icon: Padding(
padding: const EdgeInsets.only(right: 8.0, bottom: 6),
child: Image.asset("assets/icons/down-arrow2.png"),
),
iconSize: 35,
elevation: 20,
style: TextStyle(
fontSize: 18,
color: Color.fromRGBO(114,137,218, 1)
),
items: widget.items
.map(
(e) => DropdownMenuItem(
child: e == TimeUnit.calendarYear
? Text("year")
: e.toString().length == 3
? Text(e)
: Text(e.toString().split(".")[1]),
value: e,
),
)
.toList(),
onChanged: (newValue) {
setState(() {
updateCurrentUnit(widget.convertorType, newValue);
widget.calculate();
});
},
),
Комментарии:
1. пожалуйста, добавьте, что определяет widget.item
Ответ №1:
Согласно моему пониманию, это связано с ошибкой (элементы: виджет.элемент), поэтому измените ее на (элементы: виджет.элементы.записи) и e на e.ключ или e.значение
DropdownButton(
isExpanded: true,
underline: Container(),
value: currentUnits[widget.convertorType],
icon: Padding(
padding: const EdgeInsets.only(right: 8.0, bottom: 6),
child: Image.asset("assets/icons/down-arrow2.png"),
),
iconSize: 35,
elevation: 20,
style: TextStyle(
fontSize: 18,
color: Color.fromRGBO(114,137,218, 1)
),
items: widget.items.entries
.map(
(e) => DropdownMenuItem(
child: e.key == TimeUnit.calendarYear
? Text("year")
: e.toString().length == 3
? Text(e.key)
: Text(e.value),
value: e,
),
)
.toList(),
onChanged: (newValue) {
setState(() {
updateCurrentUnit(widget.convertorType, newValue);
widget.calculate();
});
},
)
Комментарии:
1. показывает эту проблему: получатель «записи» не определен для типа » Список<динамический>». Попробуйте импортировать библиотеку, которая определяет «записи», исправив имя на имя существующего получателя или определив получатель или поле с именем «записи».
2. я начинаю сборку без записей, показывает, что «тип»_компакти-руемый<Строка>» не является подтипом типа » Список<Строка><динамический>»»
Ответ №2:
во-первых, вы должны преобразовать свою карту в список, затем создать список выпадающих меню, а затем отправить его в выпадающий виджет
например, в приведенном ниже коде провинции-это список, а элементы провинций-это список выпадающих меню. Я заполняю элементы провинций нужными мне элементами из списка провинций, а затем отправляю их в раскрывающийся виджет
for (int i = 0; i < provinces.length; i ) {
provincesItems.add(DropdownMenuItem(
value: i,
child: Column(
children: [
Text(
provinces[i].persianName,
style: TextStyle(
color: Colors.black, fontWeight: FontWeight.normal),
),
],
),
));
}