我试图询问用户,按下下拉菜单后是否确定要更改数据。
目前,我在onChanged
之后启动一个警报对话框。询问用户“是否确实要更改数据?"。如果是,我保存数据更改。如果否,我关闭警报对话框。
但如果用户选择“否”,则数据已更改,我不想更改数据...如何停止更改?我有一个复杂的解决方案,即保存所有数据更改,当用户按“否”时,我加载“否”之前保存的最后一次数据,但我发现这太复杂了。是否有其他更简单的解决方案?谢谢
下面是我的代码:
new DropdownButton<String>(
onChanged: (String changedValue) {
dialog(); //lanche dialog with choice of data modification
data=changedValue;
setState(() {
data;
});
},
value: data,
items: <String>['data1', 'data2', 'data3','data4', 'data5']
.map((String changedValue) {
return new DropdownMenuItem<String>(
value: changedValue,
child: new Text(changedValue),
);
}).toList()),
2条答案
按热度按时间gfttwv5a1#
应该更新决策函数中的setState数据值,检查以下代码。
xurqigkl2#
我知道现在回答这个问题已经太晚了,因为这个问题是在4年前提出的,但是我想有些人会像我一样回答这个问题,这里是你们的答案。
我们可以通过在下拉按钮的状态键上调用reset方法,将下拉按钮的值重置为其初始值。
1.在小部件或屏幕的状态类中声明DropDownButton小部件的全局键
1.在下拉按钮的构造函数中附加键
1.现在可以从下拉键的当前状态调用reset方法,将下拉值重置为其初始值。
在我的情况下当用户在确认对话框中轻敲“否”时,我必须在下拉列表中设置旧值。我所做的是通过async/await等待警报对话框的结果(警报对话框返回一个可以为空的布尔值)。当弹出窗口关闭时,将返回一个布尔值或空值。我添加了一个if语句,以便在警报对话框返回false或null时重置下拉列表值(这意味着用户点击“否”按钮或用户通过点击空白区域关闭对话框)。
附言:AlertDialogUtils是我项目中的一个类。它在你的项目中不起作用。复制想法而不是代码:)