软键盘不会在应用程序加载时显示,除非用户手动显示它

问题描述 投票:0回答:1

重现步骤

1.使用下面的代码构建一个应用程序。

2.打开应用程序(使用三星A33测试)

3.单击“显示键盘”按钮时也看到键盘未显示

4.手动聚焦文本字段 - 现在将显示键盘。

5.隐藏键盘

6.再次按下“显示键盘”按钮,你会看到这次显示了键盘

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';

class BestHome extends StatefulWidget {
const BestHome({super.key});

@OverRide
// ignore: library_private_types_in_public_api
_MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State {
late FocusNode _focusNode;

void _showKeyboard() {
FocusScope.of(context).requestFocus(_focusNode);
}

@OverRide
void initState() {
super.initState();
focusNode = FocusNode();
SchedulerBinding.instance.addPostFrameCallback(() {
Timer(const Duration(milliseconds: 1000), () {
_focusNode.requestFocus();
});
});
}

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

@OverRide
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextField(
autofocus: true,
focusNode: _focusNode,
decoration: const InputDecoration(
hintText: 'Start typing...',
),
),
const SizedBox(height: 20),
ElevatedButton(
onPressed: _showKeyboard,
child: const Text('Show Keyboard'),
),
],
),
),
);
}
}
android flutter
1个回答
0
投票

最可能的原因是,当您调用

Textfield
时,
_focusNode.requestFocus();
已经获得焦点。在这种情况下,再次请求焦点不会导致焦点改变,并且不会使键盘可见。

最简单的解决方案是手动打开键盘

  void _showKeyboard() {
    _focusNode.requestFocus();
    SystemChannels.textInput.invokeMethod('TextInput.show');
  }
© www.soinside.com 2019 - 2024. All rights reserved.