以下是相关代码。onFieldSubmitted: 中的 debugPrint() 正在运行,所以代码到了这里,但焦点没有改变。焦点不变。
_createItemHeadingWidget() {
return Padding(
padding: const EdgeInsets.all(8.0),
child: TextFormField(
controller: _controllerItemHed,
autofocus: true,
focusNode: _focusNodeItemHed,
textInputAction: TextInputAction.next,
onFieldSubmitted: (v) {
debugPrint("ItemHeading submitted");
FocusScope.of(context).requestFocus(_focusNodeItemDetail);
},
decoration: InputDecoration(
labelText: "Item Heading",
hintText: "Enter item heading",
border: OutlineInputBorder(borderRadius: BorderRadius.circular(20.0)),
),
),
);
}
Run Code Online (Sandbox Code Playgroud)
Widget _createItemDetailWidget() {
return Padding(
padding: const EdgeInsets.all(8.0),
child: TextFormField(
controller: _controllerItemDetail,
maxLength: 75,
focusNode: _focusNodeItemDetail,
textInputAction: TextInputAction.next,
onFieldSubmitted: (v) {
debugPrint("ItemDetail submitted");
FocusScope.of(context).requestFocus(_focusNodeItemPrice);
},
decoration: InputDecoration(
labelText: "Item Detail",
hintText: "Enter item detail",
border: OutlineInputBorder(borderRadius: BorderRadius.circular(20.0)),
),
),
);
}
Run Code Online (Sandbox Code Playgroud)
class DataEntryState extends State<DataEntry> {
final TextEditingController _controllerItemHed = TextEditingController();
final TextEditingController _controllerItemDetail = TextEditingController();
final TextEditingController _controllerItemPrice = TextEditingController();
final TextEditingController _controllerSeller = TextEditingController();
final TextEditingController _controllerContactNr = TextEditingController();
final TextEditingController _controllerLocation = TextEditingController();
final FocusNode _focusNodeItemHed = FocusNode();
final FocusNode _focusNodeItemDetail = FocusNode();
final FocusNode _focusNodeItemPrice = FocusNode();
final FocusNode _focusNodeSeller = FocusNode();
final FocusNode _focusNodeContactNr = FocusNode();
final FocusNode _focusNodeLocation = FocusNode();
Run Code Online (Sandbox Code Playgroud)
在尝试了许多不起作用的方法之后,我能找到的唯一解决方案如下:
_changeFocus(BuildContext context, FocusNode focusNodeCurrent,
FocusNode focusNodeNext) {
focusNodeCurrent.unfocus();
setState(() => _focusNodeCurrent = focusNodeNext);
}
Run Code Online (Sandbox Code Playgroud)
debugPrint() 显示在 _changeFocus() 中,unfocus() 确实有效,而 requestFocus() 则不起作用。
在构建中:
if (_focusNodeCurrent != null)
FocusScope.of(context).requestFocus(_focusNodeCurrent);
Run Code Online (Sandbox Code Playgroud)
其他相关代码(其中一些可能是多余的):
TextFormField _createItemHeadingWidget(BuildContext context) {
FocusScope.of(context).reparentIfNeeded(_focusNodeItemHed);
return TextFormField(
controller: _controllerItemHed,
maxLength: 50,
keyboardType: TextInputType.text,
autofocus: _dataRec == null,
focusNode: _focusNodeItemHed,
textInputAction: TextInputAction.next,
onFieldSubmitted: (v) {
_changeFocus(context, _focusNodeItemHed, _focusNodeItemDetail);
},
decoration: InputDecoration(
labelText: "Item Heading",
hintText: "Enter item heading",
border: OutlineInputBorder(borderRadius: BorderRadius.circular(20.0)),
),
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8253 次 |
| 最近记录: |