【问题标题】:Automatically show keyboard for CupertinoSearchTextField() - Flutter自动显示 CupertinoSearchTextField() 的键盘 - Flutter
【发布时间】:2021-04-08 12:52:41
【问题描述】:

我有一个简单的颤振应用程序,当我点击搜索图标时,它应该会显示 CupertinoSearchTextField() 使用键盘

好消息是当我点击搜索图标时会显示 CupertinoSearchTextField(),正如您在第二张图片中看到的那样,但 问题是当我点击搜索图标时键盘没有弹出。

搜索文本字段和键盘必须一起显示,以便用户可以直接键入。

-> 请记住,用户仍然可以键入,但用户必须点击搜索字段才能激活键盘。

这就是我的代码的样子 -

iOSAppBar(BuildContext context) {
    return CupertinoNavigationBar(
      backgroundColor: AppColors.blue,
      middle: state ? appBarTitle() : appBarSearchBox(),
      trailing: state ? appBarSearchIcon() : appBarCancelText(),
    );
  }

//this is the search field
Widget appBarSearchBox() {
    return CupertinoSearchTextField();
  }

【问题讨论】:

  • 试试这个autoFocus: true来自文本字段中的属性
  • @Hamza 已尝试,但 CupertinoSearchTextField() 小部件不存在此特定属性。
  • 那我猜你需要使用focusNodestackoverflow.com/questions/60510427/…查看第三个答案
  • 试过了。同样的问题。键盘弹不出来。必须点击搜索文本字段才能手动打开它@Hamza

标签: flutter dart


【解决方案1】:

拳头,像这样创建一个焦点节点:

FocusNode yourFocusNode = FocusNode();

然后,将其添加到您的 CupertinoTextField

CupertinoSerchTextField(focusNode: yourFocusNode)

然后就可以调用了

FocusScope.of(context).requestFocus(yourFocusNode);

或者,如果这不起作用,请尝试

yourFocusNode.requestFocus();

在您的代码中请求焦点的任何地方。 不要忘记处理你的focusNode:

@override
void dispose() {
  myFocusNode.dispose();

  super.dispose();
}

【讨论】:

  • 太棒了!工作完美。谢谢你。很好的解释,很容易理解。我还注意到,当我点击“取消”按钮关闭键盘时,我得到一个颤动的小部件异常,但应用程序工作正常,它不会崩溃,而且这只发生在我使用 FocusScope.of(context).requestFocus (yourFocusNode) 在我的 build() 方法中,yourFocusNode.requestFocus() 完美地完成了这项工作。但是,你知道为什么我会得到一个小部件异常吗?谢谢!
  • @Haseeb 你能提供确切的小部件异常吗?
猜你喜欢
  • 2020-04-28
  • 2020-06-16
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 2022-10-21
  • 1970-01-01
相关资源
最近更新 更多