【发布时间】:2021-03-09 17:23:49
【问题描述】:
当 TextFormField 是否有焦点时,我想在 Scaffold 中隐藏/显示一些小部件。
我已经设法通过将 TextField 包装在 Focus 小部件中来做到这一点,但是每当我点击它开始输入小部件时,我试图隐藏的小部件就会消失,但键盘会失去焦点,直到我第二次点击 TextField。
任何想法为什么会发生这种情况以及如何防止它?
【问题讨论】:
当 TextFormField 是否有焦点时,我想在 Scaffold 中隐藏/显示一些小部件。
我已经设法通过将 TextField 包装在 Focus 小部件中来做到这一点,但是每当我点击它开始输入小部件时,我试图隐藏的小部件就会消失,但键盘会失去焦点,直到我第二次点击 TextField。
任何想法为什么会发生这种情况以及如何防止它?
【问题讨论】:
你可以使用flutter_keyboard_visibility包:
有几种方法可以用它来构建你的 Widget 树,比如使用单独的布尔值:
// Add new variable for keyboard in your Stateful widget
bool keyboardIsVisible = false;
// Add listener at initState
@override
void initState() {
super.initState();
KeyboardVisibilityNotification().addNewListener(
onChange: (bool visible) {
keyboardIsVisible = visible;
setState(() {});
},
);
}
或者您可以使用他们的构建器小部件:
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
/// In any of your widgets...
@override
Widget build(BuildContext context) {
return KeyboardVisibilityBuilder(
builder: (context, isKeyboardVisible) {
return Text(
'The keyboard is: ${isKeyboardVisible ? 'VISIBLE' : 'NOT VISIBLE'}',
);
}
);
【讨论】: