首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CupertinoPicker无法从所选值返回文本

CupertinoPicker无法从所选值返回文本
EN

Stack Overflow用户
提问于 2021-04-04 04:15:07
回答 1查看 459关注 0票数 0

我期望文本字段在选择时显示"A“/ "B”/ etc,但它返回索引"0“/ "1”/ "2“/ ...只是,为什么?

完整的小部件代码如下:

更新:

代码语言:javascript
复制
  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个列表,一个用于选择器,一个用于映射索引

解决方案:

代码语言:javascript
复制
    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'),
            ],
          );
        }
        );

  }
EN

回答 1

Stack Overflow用户

发布于 2021-04-04 04:21:14

对于onSelectedItemChanged: (value)方法,"value“是选定的索引。

您必须将字母列表存储在小部件的变量中

代码语言:javascript
复制
const listTextValues = [
      Text('A'),
      Text('B'),
      Text('C'),
      Text('D'),
      Text('E'),
    ];

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

代码语言:javascript
复制
selectedValue = listTextValues[value];

编辑

最终结果应该如下所示

代码语言:javascript
复制
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,
          );
        }
        );

  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66935485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档