我有一个包含两页的应用程序-每页包含一个文本字段,第一页还包含一个“下一步”按钮,该按钮将导航到第2页。
我的问题是:当第1页上的文本字段具有焦点并且我按下“下一步”按钮时,键盘将关闭,然后导航到下一个屏幕。
有没有一种方法可以抑制这种行为,使键盘保持打开状态,而不是先关闭然后在显示第2页时再次打开?
答案 0 :(得分:0)
您可以尝试
SystemChannels.textInput.invokeMethod('TextInput.hide');
隐藏
和SystemChannels.textInput.invokeMethod('TextInput.show');
用于显示键盘
它需要添加import 'package:flutter/services.dart';
答案 1 :(得分:0)
您可以使用类似于https://stackoverflow.com/a/58906112的技术。具体来说,在应用程序顶部使用隐藏的文本字段创建一个Stack
。在需要保持键盘可见并在页面之间导航时,请聚焦该文本字段。下面的示例代码。
您还需要一种使页面上的窗口小部件访问隐藏的窗口小部件的FocusNode
对象的方法。我建议使用ScopedModel
。
class KeepKeyboardOnScreen extends StatefulWidget {
final FocusNode focusNode;
const KeepKeyboardOnScreen({@required this.focusNode});
@override
State createState() => KeepKeyboardOnScreenState();
}
class KeepKeyboardOnScreenState extends State<KeepKeyboardOnScreen> {
TextEditingController _controller;
@override
void initState() {
super.initState();
_controller = new TextEditingController();
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) => Container(
height: 0,
child: ClipRect(
child: CupertinoTextField(
controller: _controller,
focusNode: widget.focusNode,
onChanged: (_) => _controller.clear(),
),
),
);
}