导航到新页面时保持键盘打开

时间:2018-12-04 15:06:04

标签: flutter

我有一个包含两页的应用程序-每页包含一个文本字段,第一页还包含一个“下一步”按钮,该按钮将导航到第2页。

我的问题是:当第1页上的文本字段具有焦点并且我按下“下一步”按钮时,键盘将关闭,然后导航到下一个屏幕。

有没有一种方法可以抑制这种行为,使键盘保持打开状态,而不是先关闭然后在显示第2页时再次打开?

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(),
          ),
        ),
      );
}