当前位置: 移动技术网 > IT编程>开发语言>Java > Flutter 全局点击空白处隐藏键盘实战

Flutter 全局点击空白处隐藏键盘实战

2020年09月04日  | 移动技术网IT编程  | 我要评论
老孟导读:为什么要实现点击空白处隐藏键盘?因为这是 ios 平台的默认行为,android 平台由于其弹出的键盘右上角默认带有关闭键盘的按钮,所以点击空白处不会隐藏键盘。对于单个页面来说,通过为 te

老孟导读:为什么要实现点击空白处隐藏键盘?因为这是 ios 平台的默认行为,android 平台由于其弹出的键盘右上角默认带有关闭键盘的按钮,所以点击空白处不会隐藏键盘。

对于单个页面来说,通过为 textfield 添加 focusnode,点击空白处时使 textfield 失去焦点,实现如下:

class dismisskeyboarddemo extends statelesswidget {
 final focusnode focusnode = focusnode();

 @override
 widget build(buildcontext context) {
  return scaffold(
   appbar: appbar(),
   body: gesturedetector(
    ontap: () {
     focusnode.unfocus();
    },
    child: container(
     color: colors.transparent,
     alignment: alignment.center,
     child: textfield(
      focusnode: focusnode,
     ),
    ),
   ),
  );
 }
}

当 app 中有多个页面多个 textfield 时,此方式会增加大量重复的代码,因此全局添加点击空白处的监听:

class myapp extends statelesswidget {
 @override
 widget build(buildcontext context) {
  return materialapp(
   title: 'flutter demo',
   builder: (context, child) => scaffold(
    body: gesturedetector(
     ontap: () {
      focusscopenode currentfocus = focusscope.of(context);
      if (!currentfocus.hasprimaryfocus &&
        currentfocus.focusedchild != null) {
       focusmanager.instance.primaryfocus.unfocus();
      }
     },
     child: child,
    ),
   ),
   home: dismisskeyboarddemo(),
  );
 }
}

也可以使用如下方式隐藏键盘:

systemchannels.textinput.invokemethod('textinput.hide');

修改 dismisskeyboarddemo 页面:

class dismisskeyboarddemo extends statelesswidget {

 @override
 widget build(buildcontext context) {
  return scaffold(
   appbar: appbar(),
   body: center(
    child: textfield(),
   ),
  );
 }
}

效果和上面是一样的,同样可以实现点击空白处隐藏键盘。

到此这篇关于flutter 全局点击空白处隐藏键盘实战的文章就介绍到这了,更多相关flutter 全局点击空白处隐藏键盘内容请搜索移动技术网以前的文章或继续浏览下面的相关文章希望大家以后多多支持移动技术网!

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网