目前,当我专注于输入(键盘已激活)并将我的应用程序发送到后台然后将其带回到前台时,焦点会变得不集中(键盘已停用)。
我尝试过类似的方法:
if (state == AppLifecycleState.resumed) { focusNode.requestFocus(); }
但是,每次我重新打开应用程序时它都会聚焦,而不是之前聚焦时。
首先,在小部件的状态中定义一个 FocusNode。该节点将与您的TextField相关联。
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
late FocusNode myFocusNode;
@override
void initState() {
super.initState();
myFocusNode = FocusNode();
}
@override
void dispose() {
myFocusNode.dispose();
super.dispose();
}
// Rest of your widget code...
}
使用 focusNode 属性将您创建的 FocusNode 分配给 TextField。
TextField(
focusNode: myFocusNode,
// Other properties...
)
在应用程序恢复上请求焦点:覆盖小部件状态中的 didChangeAppLifecycleState 方法,以在应用程序从后台恢复时请求焦点。这可确保当应用程序返回前台时,TextField 重新获得焦点。
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
if (state == AppLifecycleState.resumed) {
myFocusNode.requestFocus();
}
}