如何在flutter中使用SetState更改DropdownButtonFormField的值

问题描述 投票:0回答:1

我有一个 DropdownButtonFormField 并希望使用从另一个元素执行的

setState
更改所选值。这是我的下拉字段:

selectedNumber = "5"; 

DropdownButtonFormField<String>(
    hint: Text(selectedNumber != "Select"
        ? selectedNumber
        : "Select",                            
    ),
    //value: "",
    items: _durationList.map((value) {
        return new DropdownMenuItem<String>(
            value: value,
            child: new Text(value),
        );
    }).toList(),
    onChanged: (value) {
        setState(() {
            selectedNumber = value!;
            _selectedNumberController.text = value;
        });
    },
),

这是我的另一个带有

setState
的元素,据说应该更改 DropdownButtonFormField 中的值:

setState(() {
    selectedNumber = "Select";
    _selectedNumberController.text = "";
});

但是,此

setState
仅在未从下拉列表中选择任何项目时才起作用,即在构建方法之后,默认
selectedNumber
为 5。 触发后,
setState
会更新
selectedNumber
,并且下拉列表中的值将更改为
Select

但是,如果我在构建方法之后从下拉列表中选择一个值,即将值从 5 更改为 10,则

setState
不会更改下拉字段值。

有什么建议如何实现这一点吗?

flutter dart
1个回答
0
投票

在此代码中,您有两个可以修改 selectedNumber 值的小部件。

DropdownButtonFormField<String>(
          hint: Text(selectedNumber ?? 'Select'),
          value: selectedNumber,
          items: _durationList.map((value) {
            return DropdownMenuItem<String>(
              value: value,
              child: Text(value),
            );
          }).toList(),
          onChanged: (value) {
            setState(() {
              selectedNumber = value;
            });
          },
        ),
IconButton(
          color: Colors.white,
          onPressed: () => setState(() {
            selectedNumber = null;
          }),
          icon: Icon(Icons.abc),
        ),

在您的主小部件类中,您应该定义 selectedNumber 的默认值,例如,该值应该为 null 或 _durationList 列表中的一个元素

late String? selectedNumber = null;
© www.soinside.com 2019 - 2024. All rights reserved.