1. 程式人生 > 程式設計 >Flutter 全域性點選空白處隱藏鍵盤實戰

Flutter 全域性點選空白處隱藏鍵盤實戰

老孟導讀:為什麼要實現點選空白處隱藏鍵盤?因為這是 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,),);
 }
}

Flutter 全域性點選空白處隱藏鍵盤實戰

當 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 全域性點選空白處隱藏鍵盤內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!