Flutter 如何使用 TextField 中的当前值更新提示文本
Flutter how to update hint text with current value in TextField
我设置了一个文本字段,因此当我单击它时它会清除该值 - 否则您必须先删除当前值才能键入新值。问题是,当我点击时,可以看到原来的提示文本,这可能会让人很困惑,因为它看起来像是被重置了。
So for example, the original hint text shows 25
in the text field, then I input a new value of 48
. But if I click again to input a new value once more, the original 25
hint text value is displayed again after it clears on focus.
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 控制器之前,使用来自控制器的值使用 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,
),
),
我设置了一个文本字段,因此当我单击它时它会清除该值 - 否则您必须先删除当前值才能键入新值。问题是,当我点击时,可以看到原来的提示文本,这可能会让人很困惑,因为它看起来像是被重置了。
So for example, the original hint text shows
25
in the text field, then I input a new value of48
. But if I click again to input a new value once more, the original25
hint text value is displayed again after it clears on focus.
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 控制器之前,使用来自控制器的值使用 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,
),
),