我有一个带有 UID 和 PWD TextField 的登录页面。 UID 一旦提供就会存储在共享首选项中。因此,每当显示登录屏幕时,焦点可能位于 UID 文本字段(如果未提供/存储 UID)或 PWD 文本字段(如果显示或提供并自动填充 UID)。
我遇到的问题是我试图使用以下方法将焦点设置到正确的 TextField:
FocusScope.of(context).requestFocus(_uidFocusNode)
FocusScope.of(context).requestFocus(_pwdFocusNode);
其中 _uidFocusNode 和 _pwdFocusNode 定义为 FocusNode,并通过 focusNode 属性附加到适当的 TextField。
现在,我无法在 initState 中使用上述语句设置焦点,因为 Widget 尚未构建。但是当我在构建方法中设置它时,它会导致重建并且焦点字段一直在闪烁。有没有办法在构建 Widget 时根据逻辑设置焦点?请注意,自动对焦无法按预期工作 - 我需要将光标置于字段中。
最佳答案
当然!您可以使用 SchedulerBinding.addPostFrameCallback
安排在构建完成后调用的函数。 .
您可以简单地在 initState
中使用它:
@override
void initState() {
super.initState();
SchedulerBinding.instance.addPostFrameCallback((Duration _) {
FocusScope.of(context).requestFocus(condition ? _pwdFocusNode : _uidFocusNode);
});
}
确保在文件开头添加 import 'package:flutter/scheduler.dart';
。
关于flutter - 在 initState 中请求 TextField 焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58719769/