如何在移动终端中检测键盘何时打开?使用 Flutter 腹板

q8l4jmvw  于 2023-06-07  发布在  Flutter
关注(0)|答案(1)|浏览(176)

Flutter Web键盘检测
我正在开发一个响应式的flutter web应用程序,我一直在寻找几个选项,以便在触摸文本字段时能够检测键盘何时打开,我使用了一些库,如flutter_keyboard_visibility,但我没有成功地为flutter web。我想知道你是否知道任何可以实现的选项来检测键盘是否在Flutter Web中打开。注:还可使用以下内容:MediaQuery.of(context).viewInsets.bottom == 0但是它在打开或隐藏时也不返回我。

xmakbtuz

xmakbtuz1#

使用FocusNode

final FocusNode _focusNode = FocusNode();

并将其分配给您的TextField Widget:

TextField(focusNode: _focusNode,)

创建一个方法,当键盘处于活动状态或不处于活动状态时,您希望在其中添加逻辑:

void isActive(){
    if(_focusNode.hasFocus){
      debugPrint("Keyboard is active");
    }else{
      debugPrint("Keyboard is not active");
    }
  }

现在在initState方法中添加一个监听器到_focusNode并传递上面的方法:

@override
  void initState() {
    _focusNode.addListener(isActive);
    super.initState();
  }

另外,确保dispose_focusNode。
完整代码:

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  final FocusNode _focusNode = FocusNode();

  void isActive(){
    if(_focusNode.hasFocus){
      debugPrint("Keyboard is active");
    }else{
      debugPrint("Keyboard is not active");
    }
  }

  @override
  void initState() {
    _focusNode.addListener(isActive);
    super.initState();
  }

  @override
  void dispose() {
    _focusNode.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextField(focusNode: _focusNode,),
          ],
        ),
      ),
    );
  }
}

相关问题