我在 Scaffold 中为自定义键盘编写了代码,并设置keyboardType: TextInputType.none
为关闭默认键盘。该代码正在运行,但与预期行为相反。当我专注于 TextField 时,键盘会消失,而当我失焦时,键盘会出现。为什么会这样。代码中的错误是什么?
class MyKeyBoardApp extends StatelessWidget {
const MyKeyBoardApp({
Key? key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: KeyboardDemo(),
);
}
}
class KeyboardDemo extends StatefulWidget {
const KeyboardDemo({Key? key}) : super(key: key);
@override
_KeyboardDemoState createState() => _KeyboardDemoState();
}
class _KeyboardDemoState extends State<KeyboardDemo> {
final TextEditingController _controller = TextEditingController();
late FocusNode _focus;
@override
void initState() {
super.initState();
_focus.addListener(_onFocusChange);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
_focus.removeListener(_onFocusChange);
_focus.dispose();
}
void _onFocusChange() {
debugPrint("Focus: ${_focus.hasFocus.toString()}");
}
void buildBottomSheet() {
showModalBottomSheet(
barrierColor: Colors.transparent,
builder: (BuildContext context) {
return CustomKeyboard(
onTextInput: (myText) {
_insertText(myText);
},
onBackspace: () {
_backspace();
},
);
},
context: context);
}
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
body: Column(
children: [
const SizedBox(height: 50),
Container(
color: Colors.amber,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
controller: _controller,
keyboardType: TextInputType.none,
focusNode: _focus,
onTap: () {
debugPrint(
"Focus in bottom Sheet: ${_focus.hasFocus.toString()}");
buildBottomSheet();
},
),
),
),
],
),
);
}