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