gpt4 book ai didi

flutter - DropdownButtonFormField 将值重置为初始值

转载 作者:行者123 更新时间:2023-12-04 13:50:36 26 4
gpt4 key购买 nike

如何从 DropdownButtonFormField 重置或选择第一个值?
答案来自这里 How to reset value in Flutter DropdownButtonFormField已过时,不适合较新的 flutter 版本。
下拉按钮表单字段:

final etSkillScore1Key = GlobalKey<FormState>();
...
DropdownButtonFormField(
key: etSkillScore1Key,
decoration: const InputDecoration(labelText: 'Select value'),
onChanged: (val) async {
setState(() {
etSkillScore1 = val as int;
});

FocusScope.of(context).requestFocus(FocusNode());
},
value: etSkillScore1,
items: priorities2.map((db.Priority priorities) {
return DropdownMenuItem(
child: Text(priorities.name),
value: priorities.value,
);
}).toList(),
),
用于重置值的按钮:
IconButton(
onPressed: () {
//ERORR: Null check operator used on a null value
etSkillScore1Key.currentState!.reset();
},
icon: Icon(
Icons.close,
))
错误:
======== Exception caught by gesture
The following _CastError was thrown while handling a gesture:
Null check operator used on a null value
如果我使用
etSkillScore1Key.currentState?.reset();
然后什么也没有发生

最佳答案

首先,您没有使用正确的 key ,它应该是 GlobalKey<FormFieldState>() ,但即便如此 reset()不会工作。
这是因为DropdownButtonFormField的实现:

DropdownButtonFormField({
// ...

T? value,

// ...
}) : super(
// ...

initialValue: value,

// ...
);
(来源: Flutter Documentation)
如您所见 value DropdownButtonFormField 的属性(property)是什么定义了 initialValueFormField因此,当您重建表单字段并更改 etSkillScore1 的值时它也在改变你 DropdownButtonFormField.initialValue 的值(value).
解决方案1
如果您想要您的 reset()工作然后你可以删除属性 valueDropdownButtonFormField所以 initialValue不会随着 etSkillScore1 而改变.
DropdownButtonFormField<int>(
key: etSkillScore1Key,
decoration: const InputDecoration(labelText: 'Select value'),
onChanged: (val) {
etSkillScore1 = val;
FocusScope.of(context).requestFocus(FocusNode());
},
// value: etSkillScore1,
items: priorities2.map((db.Priority priorities) {
return DropdownMenuItem<int>(
child: Text(priorities.name),
value: priorities.value,
);
}).toList(),
)
Try the full example on DartPad
解决方案2
不要设置 valueetSkillScore1 的属性(property), 如果你想用一个初始值初始化你的小部件,那么这样做:
DropdownButtonFormField<int>(
key: etSkillScore1Key,
decoration: const InputDecoration(labelText: 'Select value'),
onChanged: (val) {
etSkillScore1 = val;
FocusScope.of(context).requestFocus(FocusNode());
},
value: 1, // Use a fixed value that won't change
items: priorities2.map((db.Priority priorities) {
return DropdownMenuItem<int>(
child: Text(priorities.name),
value: priorities.value,
);
}).toList(),
)
作为您的 value将在 DropdownButtonFormField 时修复正在重建,它将保留 1作为它的初始值。

关于flutter - DropdownButtonFormField 将值重置为初始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69872798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com