Ash*_*mas 28
是的,FocusNode 和onFieldSubmitted从TextFormField可能是要走的路.
FocusScope.of(上下文).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
Run Code Online (Sandbox Code Playgroud)
您可能还希望FocusScope.of()从按钮而不是onFieldSubmitted 触发,但希望上面的示例为您提供足够的上下文来为您的用例构建适当的解决方案.
Cop*_*oad 24
截屏:
无需使用 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(),
),
],
),
);
}
Run Code Online (Sandbox Code Playgroud)
我就是这样做的:
var _focusNodes = List.generate(6, (index) => FocusNode()));
Run Code Online (Sandbox Code Playgroud)
在 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();
}
},
),
Run Code Online (Sandbox Code Playgroud)
有一个类似的方法,就像在 Android 中一样。
添加
textInputAction
Run Code Online (Sandbox Code Playgroud)
参数到 TextFormField 小部件,然后将属性添加为;
TextInputAction.next
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8986 次 |
| 最近记录: |