在 Flutter 中将应用程序从后台带到前台时如何自动将焦点恢复到之前聚焦的 TextField

问题描述 投票:0回答:1

目前,当我专注于输入(键盘已激活)并将我的应用程序发送到后台然后将其带回到前台时,焦点会变得不集中(键盘已停用)。

我尝试过类似的方法:

if (state == AppLifecycleState.resumed) { focusNode.requestFocus(); }

但是,每次我重新打开应用程序时它都会聚焦,而不是之前聚焦时。

flutter dart textfield flutter-focus-node
1个回答
0
投票

首先,在小部件的状态中定义一个 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();
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.