【问题标题】:Keep keyboard open when navigating to a new page导航到新页面时保持键盘打开
【发布时间】:2019-05-06 01:13:37
【问题描述】:

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

我的问题是:当第 1 页上的文本字段获得焦点并按下“下一步”按钮时,键盘将在导航到下一个屏幕之前关闭。

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

【问题讨论】:

  • 嗨!你找到答案了吗?有可能吗?

标签: flutter


【解决方案1】:

你可以试试

SystemChannels.textInput.invokeMethod('TextInput.hide'); 隐藏

和SystemChannels.textInput.invokeMethod('TextInput.show'); 用于显示键盘

并且需要加上import 'package:flutter/services.dart';

【讨论】:

【解决方案2】:

您可以使用类似于 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(),
          ),
        ),
      );
}

【讨论】:

    【解决方案3】:

    如果您第二页中的 TextField 的 autofocus 设置为 true,并且在您点击第一页中的下一个按钮之前键盘处于活动状态,则在页面转换期间键盘将保持不变。

    【讨论】:

      猜你喜欢
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多