gpt4 book ai didi

flutter - Flutter:无法更新变量状态

转载 作者:行者123 更新时间:2023-12-03 04:15:53 25 4
gpt4 key购买 nike

在我的应用程序中,有一个添加付款的部分。要添加付款,管理员将:

  • 选择一个用户
  • 输入金额
  • 从日期选择
  • 选择以添加日期

  • 并保存。

    目标:我想根据以前的日期从日期起动态更新

    示例案例:
  • 我们添加了用户的首次付款,从1st June 20191st September 2019
  • ,当我们尝试第二次付款时,选择了客户;我想获取日期为的最后一笔付款,日期为,日期为,自动填充。 (将db的日期从数据库更新为的日期,以表格的形式)

  • 初始化时无法完成此操作,因为日期因每个用户而异,因此我们可以根据用户的选择进行操作。

    我已完成的操作:

    我几乎完成了所有操作,但是在更新字段值时遇到了问题。

    我已经完成以下步骤:
  • 创建了一个函数,当用户被选中时执行该函数
  • 函数查询数据库,并提取最后的付款明细
  • 并返回至今的日期先前付款的字段值
  • 从日期字段开始的字段值是在同一函数内设置的,如下所示:
     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/

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