flutter - Flutter:无法更新变量状态
问题描述
在我的应用程序中,有一个部分可以添加付款。要添加付款,管理员将:
- 选择一个用户
- 输入金额
- 从日期中选择
- 选择日期
并保存它。
目标:我想根据上一个日期动态更新日期。
示例案例:
- 我们添加了用户的第一笔付款,从
1st June 2019
到1st September 2019
- 当我们尝试进行第二次付款时,当客户被选中时;我想从 date获得最后一次付款,自动填充。(日期从分贝到表格中的日期)
它不能在初始化时完成,因为每个用户的日期不同,所以我们可以在用户选择时进行。
我做了什么:
我几乎完成了所有工作,但是在更新字段值时遇到了问题。
我已经完成了这些步骤:
- 创建了一个函数,当用户被选中时执行
- 函数查询数据库,并提取最后的付款明细
- 并返回上一次付款的日期字段值
起始日期字段值在同一函数中设置,如下所示:
setState(() { _fromDate = DateTime.parse(toDate); });
问题:
_fromDate
在函数内部打印setState
会打印正确的值,但它在null
外部。
请告诉我,我怎样才能正确更新价值并摆脱这个问题?
更新:代码Widget
如下:(state
设置如上,从db获取数据后)
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类来处理运行时文本字段的更改。
每当用户使用关联的 TextEditingController 修改文本字段时,文本字段都会更新值,并且控制器会通知其侦听器。然后,听众可以阅读文本和选择属性,以了解用户输入的内容或选择的更新方式。
该过程非常简单,只需按照以下步骤操作:
创建
controller
:TextEditingController _fromDateController = new TextEditingController();
像这样分配给你
DateTimeField
:DateTimeField( ... controller: _fromDateController, );
您的领域的更新
onSaved
方法:DateTimeField( ... onSaved: (val) => _fromDateController.text = val.toString(), );
controller
从 db 获取数据时更新:setState(() { _fromDateController.text = toDate; });
最后,别忘了
dispose
:
请记住在不再需要 TextEditingController 时将其丢弃。这将确保我们丢弃对象使用的任何资源。
@override
void dispose() {
_fromDateController.dispose();
...
super.dispose();
}
希望能帮助到你!
推荐阅读
- python - 在 Python 中复制每个第二个矩阵元素
- java - 从第三方 Web 服务和应用程序的专用数据库中检索客户字段时的 CustomerDAO 替代方案
- android - 如何将图像上传到服务器,包括原始图像和调整大小图像?
- confluent-platform - RowSubscriber 如何判断窗口的第一条记录何时到达?
- css - 选择选项在我的控制台中完美运行时无法以我的模态形式工作
- jquery - ASP.NET Core + Antiforgery + jQuery Ajax POST + Nginx - 400 错误请求
- azure-data-explorer - Kusto - 使用解析运算符将字符串字段提取到新列中
- node.js - 如何在 API 网关中设置响应模板以从错误中删除堆栈跟踪?
- python - 从 Python 中的段错误中恢复
- nullpointerexception - 在我的服务集成中,我在实例化另一个服务的类时发现了 NullPointerException