【发布时间】:2020-11-27 13:01:16
【问题描述】:
在我的项目中,我将整个 MaterialApp 包装在 GestureDetector 中,当用户使用这段代码点击屏幕时,它应该会关闭键盘
FocusScope.of(context).unfocus()
在测试了多个场景后,它都不起作用,所以我决定用错误的方式来做
FocusScope.of(context).requestFocus(FocusNode())
但现在我遇到了另一个问题。这是我的简单屏幕代码,由MaterialApp 的routes builder 实例化。
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 在TextEditingController 上调用clearComposing。我什至尝试过,但没有运气。我该如何解决?还有其他人有更好的解决方案来处理 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!
【问题讨论】:
-
我想你没有得到这个问题。这个库正在改变滚动行为@ParthPitroda
-
为什么你不在 onPressed 里面做 FocusScope.of(context).unfocus() ?
-
它不工作,
TextField仍然是焦点 @jitsm555 -
您要先关闭键盘然后再进行导航吗?你的问题不清楚