在我的应用程序中,有一个添加付款的部分。要添加付款,管理员将:
并保存。
目标:我想根据以前的日期从日期起动态更新。
示例案例:
1st June 2019
到1st September 2019
初始化时无法完成此操作,因为日期因每个用户而异,因此我们可以根据用户的选择进行操作。
我已完成的操作:
我几乎完成了所有操作,但是在更新字段值时遇到了问题。
我已经完成以下步骤:
setState(() {
_fromDate = DateTime.parse(toDate);
});
问题:
在
_fromDate
函数内部打印setState
会打印正确的值,但在外面是null
。请告诉我,如何正确更新值(value)并摆脱这个问题?
更新:
Widget
代码如下:(从数据库获取数据后,如上所述设置了state
)DateTimeField(
onSaved: (val) => setState(() => _fromDate = val),
keyboardType: TextInputType.datetime,
onChanged: (DateTime newValue) {
setState(() {
_fromDate = newValue;
});
},
onShowPicker: (context, currentValue) {
return showDatePicker(
context: context,
firstDate: DateTime.now(),
initialDate: currentValue ?? DateTime.now(),
);
},
);
最佳答案
使用TextEditingController类处理运行时文本字段更改。
Whenever the user modifies a text field with an associated TextEditingController, the text field updates value and the controller notifies its listeners. Listeners can then read the text and selection properties to learn what the user has typed or how the selection has been updated.
该过程非常简单,只需遵循以下步骤:
controller
:TextEditingController _fromDateController = new TextEditingController();
DateTimeField
:DateTimeField(
...
controller: _fromDateController,
);
onSaved
方法:DateTimeField(
...
onSaved: (val) => _fromDateController.text = val.toString(),
);
controller
:setState(() {
_fromDateController.text = toDate;
});
dispose
编码:Remember to dispose of the TextEditingController when it is no longer needed. This will ensure we discard any resources used by the object.
@override
void dispose() {
_fromDateController.dispose();
...
super.dispose();
}
希望能帮助到你!
关于flutter - Flutter:无法更新变量状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58143655/