【问题标题】:CupertinoPicker cannot return Text from selected valueCupertinoPicker 无法从选定值返回文本
【发布时间】:2021-06-30 06:43:01
【问题描述】:

我希望文本字段在选择时显示“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'),
            ],
          );
        }
        );

  }

【问题讨论】:

    标签: flutter flutter-cupertino cupertinopicker


    【解决方案1】:

    使用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,
              );
            }
            );
    
      }
    

    【讨论】:

    • 现在我遇到了另一个错误:缺少选择器,例如“.identifier”或“[0]”。
    • 您能否编辑您的答案以显示您的新实施?
    • @icantcode 更新了答案以帮助您了解如何解决您的问题 :)
    • 错误:只能将静态字段声明为 const。尝试使用“final”而不是“const”,或者添加关键字“static”。 const List listTextValues = [ ^^^^^ 错误:“Widget”类型的值不能分配给“int”类型的变量。
    • 您的错误非常明确,只需将关键字 const 替换为 final。关键是,你必须从你的小部件树中提取你的文本小部件列表(或者只是你的字符串列表,这会更干净),以便你的回调方法 onSelectedItemChanged 可以访问这个列表
    猜你喜欢
    • 2020-10-10
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    相关资源
    最近更新 更多