0

我在 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();
                },
              ),
            ),
          ),
        ],
      ),
    );
  }

在此处输入图像描述 在此处输入图像描述

4

0 回答 0