CupertinoPicker无法从所选值返回Text



我希望文本字段显示"A〃/"B〃/等等,然而它返回索引"0";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个列表,一个用于picker,另一个用于映射索引

解决方案:

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);值";是选定的索引
您必须将您的字母列表存储在小部件中的变量中

const listTextValues = [
Text('A'),
Text('B'),
Text('C'),
Text('D'),
Text('E'),
];

并在onSelectedItemChanged实现中获取所选索引处的项目

selectedValue = listTextValues[value];

编辑

最终结果应该看起来像下面的

int selectedValue;
final List<Widget> listTextValues = [
Text('Eastern'),
Text('South'),
Text('West'),
Text('North'),
Text('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 = listTextValues[value];
regionController.value = TextEditingValue(text: selectedValue.toString());
}
});
},
itemExtent: 32.0,
children: listTextValues,
);
}
);
}

最新更新