【发布时间】:2020-05-20 06:14:11
【问题描述】:
我有来自flutter_form_builder 的以下FormBuilderDropdown 定义供用户选择美国州
class _StateFormBuilderDropdownState extends State<StateFormBuilderDropdown> {
@override
Widget build(BuildContext context) {
return FormBuilderDropdown(
attribute: widget.attribute,
initialValue: widget.initialValue,
validators: [FormBuilderValidators.required()],
decoration: InputDecoration(labelText: "State (required)"),
hint: Text('Select State'),
items: List<DropdownMenuItem>.from(
UsStates.states.map((s) => DropdownMenuItem(
value: s.code, child: Text(s.name)
))
),
onChanged: widget.onChanged
);
}
}
当我到达此屏幕时,我会执行反向地理编码以自动填充用户地址。
地址解析后,我调用setState 更改表单值。问题是 FormBuilderDropdown 只有 initialValue 可用于设置值,据我所知,在第一次构建后不会再次评估,所以我不能用它来更改值。
如何在初始设置后更改FormBuilderDropdown?
【问题讨论】:
-
看你的代码
widget.initialvalue好像是StatefulWidget中的一个属性。你能把它作为变量放在_StateFormBuilderDropdownState中并检查一下。 -
我安装了软件包并测试了
FormBuilderDropdown小部件,它会自动在下拉列表中设置选定的值。如果您需要在其他地方使用该值,那么您应该从 onChanged 中获取 if 并将其传递。 -
@Abhilash Chandran:我认为这不会有什么不同,如果您检查
FormBuilderDropdown的代码,参数initialvalue仅用于initState。该代码不是在每次构建时都执行,而是在第一次构建时执行 -
@João Soares:问题不是提取选定的下拉值,而是使用
setState以编程方式更改它 -
@StackOverflower 你是对的。看起来formsbuilder没有重置这个值。然而,基本的
DropDownButton公开了一个value属性,可以重置它来实现这一点。如果您有兴趣,我将分享代码,该代码还利用提供程序包来提示状态更改重建。
标签: flutter flutter-form-builder