Flutter 点击空白处回收键盘

7 min read
// main.dart
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        FocusScopeNode currentFocus = FocusScope.of(context);

        if (!currentFocus.hasPrimaryFocus) {
          currentFocus.unfocus();
        }
      },
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: MyHomePage(),
      ),
    );
  }
}

我们需要检查当前的FocusNode是否有 "主要焦点"。如果没有,我们就在当前节点上调用unfocus()来移除焦点,并触发键盘来回收。

如果你试图对当前拥有主要焦点的节点取消焦点(),Flutter会抛出一个异常。