移除按下多个按钮的键盘焦点
Posted
技术标签:
【中文标题】移除按下多个按钮的键盘焦点【英文标题】:Removing keyboard focus on multiple buttons pressed 【发布时间】:2020-10-07 02:15:16 【问题描述】:我试图在 textField 之外的任何地方点击时隐藏键盘。所以我用 GestureDetector 包裹了 Scaffold 并用 unfocused() 设置了 onTap。这很好用,但是当按下按钮时键盘仍然处于活动状态
Widget build(BuildContext context)
return GestureDetector(
onTap: () => FocusScope.of(context).unfocus(),
child: Scaffold(
appBar: AppBar(
actions: <Widget>[FlatButton(child: Text('Done'), onPressed: () )],
),
body: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
FlatButton(
child: Text('something'),
onPressed: () ,
),
TextField(),
],
),
),
);
有没有什么方法可以移除焦点而不在所有按钮的 onTap 中添加不聚焦的按钮。原因是我那里有很多按钮,有些甚至设置了 onLogTap,所以会有很多重复的代码
【问题讨论】:
【参考方案1】:您还需要在FlatButton
的onPressed()
方法中添加隐藏键盘的代码
FlatButton(
child: Text('something'),
onPressed: ()
FocusScope.of(context).unfocus();
,
),
希望有一些解决方案,我不需要这么多重复的代码来做一件事。
这是不可能的,因为GestureDetector
小部件的点击事件和FlatButton
的点击事件都不同,
您正在注册FlatButton
的不同/单独点击事件,这就是为什么当您点击FlatButton
时您的键盘没有隐藏的原因
现在按下按钮时键盘不隐藏的原因
因为GestureDetector
小部件的点击事件如果被FlatButton
的点击事件覆盖
解决方案
你可以做一件事,创建一个通用方法来隐藏键盘,然后调用该方法来从按钮单击
【讨论】:
嗯,这是我试图避免的。正如我在问题中提到的那样,我的屏幕上有很多按钮,每个按钮都做不同的事情。我希望有一些解决方案,我不需要这么多重复的代码来做一件事。我仍然赞成你的回答was hoping for some solution where I wouldn't need so many duplicate codes to do one thing.
AFAIK 这是不可能的,因为GestureDetector
小部件的点击事件和FlatButton
的点击事件是不同的你可以做一件事,创建一个隐藏键盘的通用方法,并调用该方法从按钮单击
是的,我有点害怕......创建方法会使该方法被多次调用,这又是同样的问题......我会等待可能有其他技巧的人如果没有(我不这么认为),那么我会将您的答案标记为已回答【参考方案2】:
通过跳出框框思考,我设法通过修改 GestureDetector.. 隐藏了所有水龙头上的键盘。
Widget build(BuildContext context)
return GestureDetector(
onPanDown: (pd) FocusScope.of(context).unfocus();, //<- replaced
child: Scaffold(
appBar: AppBar(
actions: <Widget>[FlatButton(child: Text('Done'), onPressed: () )],
),
body: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
FlatButton(
child: Text('something'),
onPressed: () ,
),
TextField(),
],
),
),
);
现在键盘将隐藏在 TextField 之外的任何地方,即使在按钮单击时也是如此。无需在每次按钮单击时隐藏它。如果您知道更好的解决方案,请告诉我
更新: 当点击已聚焦的 TextField 时,此解决方案将创建异常
【讨论】:
以上是关于移除按下多个按钮的键盘焦点的主要内容,如果未能解决你的问题,请参考以下文章
按下按钮和文本字段切换后 UITextField 失去焦点(键盘保持可见)
移动 Safari - 使用 Javascript 关闭键盘