Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振如何使用TextField中的当前值更新提示文本_Flutter_Dart_Textfield - Fatal编程技术网

Flutter 颤振如何使用TextField中的当前值更新提示文本

Flutter 颤振如何使用TextField中的当前值更新提示文本,flutter,dart,textfield,Flutter,Dart,Textfield,我设置了一个文本字段,所以当我点击它时,它会清除该值-否则你必须先删除当前值,然后才能键入新值。问题是,当我单击时,可以看到原始提示文本,这可能会非常混乱,因为它看起来像是被重置了 例如,原始提示文本在文本字段中显示25,然后我输入一个新值48。但如果我再次单击以再次输入新值,则在焦点清除后,原始的25提示文本值将再次显示 如何使提示文本更新为以前的值(在清除之前),以便单击时显示相同的值?这是表单字段中的正常行为,因此我希望实现这一点。在清除textField控制器之前,请使用控制器中的值se

我设置了一个文本字段,所以当我点击它时,它会清除该值-否则你必须先删除当前值,然后才能键入新值。问题是,当我单击时,可以看到原始提示文本,这可能会非常混乱,因为它看起来像是被重置了

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


如何使提示文本更新为以前的值(在清除之前),以便单击时显示相同的值?这是表单字段中的正常行为,因此我希望实现这一点。

在清除textField控制器之前,请使用控制器中的值setState更新提示变量。那就行了

为清楚起见,答案是将分配给
hintText
hint
字符串的值设置为控制器文本值的最后一个值,就在清除之前。这是在
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,
        ),
      ),

你必须把代码写出来才能得到答案。否则,这应该是一个评论。你可以复制粘贴我的代码,并编辑必要的内容。提示是当前为提示文本传递的参数。您正在试图使提示文本等于textfield controller.Text的最后一个值吗?
  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,
        ),
      ),