老孟導讀:爲何要實現點擊空白處隱藏鍵盤?由於這是 iOS 平臺的默認行爲,Android 平臺因爲其彈出的鍵盤右上角默認帶有關閉鍵盤的按鈕,因此點擊空白處不會隱藏鍵盤。git
對於單個頁面來講,經過爲 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 時,此方式會增長大量重複的代碼,所以全局添加點擊空白處的監聽:app
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(), ); } }
也能夠使用以下方式隱藏鍵盤:less
SystemChannels.textInput.invokeMethod('TextInput.hide');
修改 DismissKeyboardDemo 頁面:ide
class DismissKeyboardDemo extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(), body: Center( child: TextField(), ), ); } }
效果和上面是同樣的,一樣能夠實現點擊空白處隱藏鍵盤。ui
老孟Flutter博客地址(330個控件用法):http://laomengit.comspa
歡迎加入Flutter交流羣(微信:laomengit)、關注公衆號【老孟Flutter】:code
![]() |
![]() |