Я ожидаю, что текстовое поле будет отображать A / B / и т. Д. При выборе, однако оно возвращает только индекс 0/1/2 / …, почему ???
полный код виджета ниже:
ОБНОВЛЕНО:
int selectedValue;
Future showPicker() async {
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return CupertinoPicker(
backgroundColor: Colors.white,
scrollController: FixedExtentScrollController(initialItem: 3),
onSelectedItemChanged: (value) {
setState(() {
if (value != null) {
selectedValue = listTextValues[value];
regionController.value = TextEditingValue(text: selectedValue.toString());
}
});
},
itemExtent: 32.0,
children: const listTextValues = [
Text('Eastern'),
Text('South'),
Text('West'),
Text('North'),
Text('Island'),
],
);
}
);
}
Код ниже работает, просто задайтесь вопросом, как упростить код, поскольку я использую 2 списка, один для средства выбора и один для сопоставления индекса.
Решение:
int selectedValue;
final List<String> listTextValues = ['Eastern', 'South', 'West', 'North', 'Island'];
Future showPicker() async {
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return CupertinoPicker(
backgroundColor: Colors.white,
scrollController: FixedExtentScrollController(initialItem: 3),
onSelectedItemChanged: (value) {
setState(() {
if (value != null) {
selectedValue = value;
regionController.value = TextEditingValue(text: listTextValues[selectedValue].toString());
}
});
},
itemExtent: 32.0,
children: const [
Text('Eastern'),
Text('South'),
Text('West'),
Text('North'),
Text('Island'),
],
);
}
);
}
В методе
onSelectedItemChanged: (value)
значением является выбранный индекс.Вы должны сохранить свой список букв в переменной в вашем виджете.
и получить элемент по выбранному индексу в реализации onSelectedItemChanged
Изменить
Окончательный результат должен выглядеть следующим образом
теперь у меня другая ошибка: отсутствует селектор, такой как ‘.identifier’ или ‘[0]’. — person icantcode; 04.04.2021
Не могли бы вы отредактировать свой ответ, показывая вашу новую реализацию? — person icantcode; 04.04.2021
обновил код выше — person icantcode; 04.04.2021
@icantcode обновил ответ, чтобы помочь вам понять, как решить вашу проблему — person icantcode; 04.04.2021
Ошибка: только статические поля могут быть объявлены как const. Попробуйте использовать final вместо const или добавить ключевое слово static. const List ‹Widget› listTextValues = [^^^^^ Ошибка: значение типа Widget не может быть присвоено переменной типа int. — person icantcode; 04.04.2021
Ваша ошибка здесь довольно очевидна, просто замените ключевое слово const на final. Дело в том, что вам нужно извлечь свой список текстовых виджетов (или оправдать свой список строк, что было бы чище) за пределами вашего дерева виджетов, чтобы ваш метод обратного вызова onSelectedItemChanged мог получить доступ к этому списку — person icantcode; 04.04.2021
спасибо, я обновил финальную версию выше. — person icantcode; 04.04.2021