Flutter 在颤振中将焦点从一个文本字段更改为下一个文本字段
我有两个Flutter 在颤振中将焦点从一个文本字段更改为下一个文本字段,flutter,dart,Flutter,Dart,我有两个textFormField小部件。一旦用户完成了第一个文本字段,我想关注下一个textField。有没有办法在颤振中做到这一点?目前,“完成”按钮仅关闭键盘。我猜,focusNode类可能就是这个问题的答案,但不确定它是如何工作的,有没有人有focusNode类的好例子?提前感谢。是的,从a提交的onfield可能是最好的选择 FocusScope.of(context).requestFocus(focusNode) 下面是一个可能有帮助的示例: FocusNode textS
textFormField
小部件。一旦用户完成了第一个文本字段,我想关注下一个textField
。有没有办法在颤振中做到这一点?目前,“完成”按钮仅关闭键盘。我猜,focusNode
类可能就是这个问题的答案,但不确定它是如何工作的,有没有人有focusNode类的好例子?提前感谢。是的,从a提交的onfield
可能是最好的选择
FocusScope.of(context).requestFocus(focusNode)
下面是一个可能有帮助的示例:
FocusNode textSecondFocusNode = new FocusNode();
TextFormField textFirst = new TextFormField(
onFieldSubmitted: (String value) {
FocusScope.of(context).requestFocus(textSecondFocusNode);
},
);
TextFormField textSecond = new TextFormField(
focusNode: textSecondFocusNode,
);
// render textFirst and textSecond where you want
您可能还希望通过按钮而不是onfildsubmitted触发
FocusScope.of()
,但希望上面的示例为您提供足够的上下文,以便为您的用例构建合适的解决方案。有一种类似于Android的方法
加
参数添加到TextFormField小部件,然后将属性添加为
TextInputAction.next
屏幕截图:
无需使用
FocusNode
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Column(
children: [
TextField(
decoration: InputDecoration(hintText: 'First Name'),
textInputAction: TextInputAction.next,
onEditingComplete: () => FocusScope.of(context).nextFocus(),
),
TextField(
decoration: InputDecoration(hintText: 'Last Name'),
textInputAction: TextInputAction.done,
onSubmitted: (_) => FocusScope.of(context).unfocus(),
),
],
),
);
}
我就是这样做的:
var _focusNodes = List.generate(6, (index) => FocusNode()));
在TextFormField中:
TextFormField(
focusNode: _focusNodes[i],
maxLines: 1,
textInputAction: TextInputAction.next,
onChanged: (text) {
if (i < _controllers.length) {
if (text.isEmpty)
_focusNodes[i - 1].requestFocus();
else
_focusNodes[i + 1].requestFocus();
}
},
),
TextFormField(
聚焦节点:_聚焦节点[i],
maxLines:1,
textInputAction:textInputAction.next,
一旦更改:(文本){
如果(i<\u控制器长度){
if(text.isEmpty)
_focusNodes[i-1].requestFocus();
其他的
_focusNodes[i+1].requestFocus();
}
},
),
欢迎来到StackOverflow。请拿着这本书四处看看,通读一遍,然后阅读,并提供一个答案。如果周围的人能很容易地阅读和理解你的意思,或者问题是什么,他们会更愿意帮助:)在这种情况下,如何更改键盘上的按钮?像其他应用一样,从复选标记到箭头have@busuu据我所知,这不会改变键盘上的按钮。它只会更改键盘上的enter
键的行为,以便将焦点切换到下一个字段。这是我们目前得到的最好的了。@busuu要将键盘上的“检查”按钮更改为箭头,请在TextFormField上设置以下内容。textInputAction:textInputAction.next如果您需要向键盘添加更多操作,看看这个软件包:对OTP身份验证有用。这不只是改变弹出式键盘吗?这实际上是可行的,但只有当文本字段没有带有onPressed设置的后缀小部件时,它才对我有效。当点击文本输入上的擦除/删除时,有没有办法聚焦上一个screen@A.K.J.94您可以使用更改后的onChanged
属性并处理其中的逻辑。
TextFormField(
focusNode: _focusNodes[i],
maxLines: 1,
textInputAction: TextInputAction.next,
onChanged: (text) {
if (i < _controllers.length) {
if (text.isEmpty)
_focusNodes[i - 1].requestFocus();
else
_focusNodes[i + 1].requestFocus();
}
},
),