Вы можете получить индекс выбора, используя функцию indexOf()
a List
.Например, учитывая ваш код:
onChanged: (value) {
int index = workTypes.indexOf(value);
setState(() => _workTypes = value);
},
Просто имейте в виду, что indexOf()
возвращает индекс первого соответствующего элемента из списка, поэтому, если у вас есть повторяющиеся строки, вы получитенеправильный индекс.
Редактировать после уточнения вопроса
A DropdownMenuItem
может принимать значение объекта и при этом отображать только String
.Для приведенного выше кода начните с изменения типа _workTypes
на DataWorkTypes
и workTypes
на List<DataWorkTypes>
.Ваш код будет выглядеть примерно так:
@override
void initState() {
HelperDatabase1().displayWorkTypes().then((result) {
setState(() {
workTypes = result;
});
});
}
child: DropdownButton<DataWorkTypes>(
isExpanded: true,
value: _workTypes,
items: workTypes.map((DataWorkTypes value) {
return DropdownMenuItem<DataWorkTypes>(
value: value,
child: Text(
value.d, // same label as before
overflow: TextOverflow.ellipsis,
),
);
}).toList(),
onChanged: (value) => setState(() {
int index = value.i; // here is your index
_workTypes = value;
}),
style: Theme.of(context).textTheme.title,
),