【问题标题】:Flutter how to update hint text with current value in TextFieldFlutter 如何使用 TextField 中的当前值更新提示文本
【发布时间】:2019-12-12 08:30:32
【问题描述】:

我设置了一个文本字段,因此当我单击它时它会清除值 - 否则您必须删除当前值才能键入新值。问题是,当我单击时,可以看到原始提示文本,这可能会让人很困惑,因为它看起来像是被重置了。

例如,原始提示文本在文本字段中显示25,然后我输入一个新值48。但是如果我再次点击输入一个新值,原来的25提示文本值在它清除焦点后会再次显示。

  final TextEditingController control;
  final Function onchanged;
  FocusNode _focusNode;

  @override
  void initState() {
    super.initState();
    _focusNode = FocusNode();
    _focusNode.addListener(() {
      if (_focusNode.hasFocus) control.clear();
    });
  }

  TextField(
        focusNode: _focusNode,
        controller: control,
        onChanged: onchanged,
        decoration: InputDecoration(
          hintText: hint,
        ),
      ),

我怎样才能使提示文本更新到以前的值(在它被清除之前),以便在单击它时显示相同的值?这是表单字段中的正常行为,所以我想实现这一点。

【问题讨论】:

  • 您正在寻求使提示文本等于 textfield controller.text 的最后一个值?

标签: flutter dart textfield


【解决方案1】:

为了清楚起见,答案是将分配给hintTexthint 字符串的值设置为控制器文本值的最后一个值,就在它被清除之前。这是在 FocusNode 监听器中使用 setState 完成的。

  String _hint;
  final TextEditingController control;
  final Function onchanged;
  FocusNode _focusNode;

  @override
  void initState() {
    super.initState();
    _focusNode = FocusNode();
    _focusNode.addListener(() {
      if (_focusNode.hasFocus) {
        setState(() {
          _hint = control.text;
        });
        control.clear();
      }
    });
  }

  TextField(
        focusNode: _focusNode,
        controller: control,
        onChanged: onchanged,
        decoration: InputDecoration(
          hintText: _hint,
        ),
      ),

【讨论】:

    【解决方案2】:

    在清除 textField 控制器之前,使用来自控制器的值使用 setState 更新提示变量。那应该做的工作。

    【讨论】:

    • 你必须写出代码才能得到答案。否则这应该是一个评论。您可以复制并粘贴我的代码并编辑必要的内容。提示是当前提示文本的传递参数。
    猜你喜欢
    • 2019-02-19
    • 2020-05-24
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 2020-04-21
    • 2018-09-28
    相关资源
    最近更新 更多