在我的项目中,我将整个MaterialApp
包裹在一个GestureDetector
中,该代码应在用户点击屏幕时关闭键盘,并使用这段代码
FocusScope.of(context).unfocus()
在测试了多种情况后,它无法正常工作,所以我决定以错误的方式进行操作FocusScope.of(context).requestFocus(FocusNode())
但是现在我遇到了另一个问题。这是我的一个简单屏幕的代码,该屏幕由MaterialApp
的routes
构建器实例化。import 'package:flutter/material.dart';
class TestScreen extends StatefulWidget {
@override
_TestScreenState createState() => _TestScreenState();
}
class _TestScreenState extends State<TestScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: <Widget>[
TextFormField(),
FlatButton(
onPressed: () => Navigator.push(context,
MaterialPageRoute(builder: (context) => TestScreen())),
child: Text('Test'))
],
),
);
}
}
重现错误的步骤是:1-开始编辑TextField
。通过点击屏幕上的某处,使2-焦点TextField
失去焦点。 3点击按钮导航到另一个屏幕。结果如下:当我尝试通过按键盘的完成按钮使
TextField
失去焦点时,不会发生此行为。根据按下完成按钮时的源代码,TextField
在clearComposing
上调用TextEditingController
。我什至尝试过但没有运气。我该如何解决?还有其他人有更好的解决方案来处理Flutter中的关闭键盘吗?这也是我的
flutter doctor
结果:Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.17.5, on Mac OS X 10.15.5 19F101, locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[✓] Xcode - develop for iOS and macOS (Xcode 11.6)
[✓] Android Studio (version 4.0)
[✓] VS Code (version 1.47.3)
[✓] Connected device (2 available)
• No issues found!
最佳答案
在GitHub上搜索了大量与焦点管理相关的问题后,似乎没人知道正确的方法是什么。最后,这行代码解决了我的问题:
WidgetsBinding.instance.focusManager.primaryFocus?.unfocus();
我不知道它的副作用,但目前正在起作用。
关于flutter - 导航到另一个屏幕后,TextField获得焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63297582/