Flutter Web键盘检测我正在开发一个响应式的flutter web应用程序,我一直在寻找几个选项,以便在触摸文本字段时能够检测键盘何时打开,我使用了一些库,如flutter_keyboard_visibility,但我没有成功地为flutter web。我想知道你是否知道任何可以实现的选项来检测键盘是否在Flutter Web中打开。注:还可使用以下内容:MediaQuery.of(context).viewInsets.bottom == 0但是它在打开或隐藏时也不返回我。
xmakbtuz1#
使用FocusNode
FocusNode
final FocusNode _focusNode = FocusNode();
并将其分配给您的TextField Widget:
TextField
TextField(focusNode: _focusNode,)
创建一个方法,当键盘处于活动状态或不处于活动状态时,您希望在其中添加逻辑:
void isActive(){ if(_focusNode.hasFocus){ debugPrint("Keyboard is active"); }else{ debugPrint("Keyboard is not active"); } }
现在在initState方法中添加一个监听器到_focusNode并传递上面的方法:
initState
_focusNode
@override void initState() { _focusNode.addListener(isActive); super.initState(); }
另外,确保dispose_focusNode。完整代码:
dispose
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,), ], ), ), ); } }
1条答案
按热度按时间xmakbtuz1#
使用
FocusNode
并将其分配给您的
TextField
Widget:创建一个方法,当键盘处于活动状态或不处于活动状态时,您希望在其中添加逻辑:
现在在
initState
方法中添加一个监听器到_focusNode
并传递上面的方法:另外,确保
dispose
_focusNode。完整代码: