flutter - 导航到另一个屏幕后,TextField获得焦点

标签 flutter dart keyboard

在我的项目中,我将整个MaterialApp包裹在一个GestureDetector中,该代码应在用户点击屏幕时关闭键盘,并使用这段代码

FocusScope.of(context).unfocus()
在测试了多种情况后,它无法正常工作,所以我决定以错误的方式进行操作
FocusScope.of(context).requestFocus(FocusNode())
但是现在我遇到了另一个问题。这是我的一个简单屏幕的代码,该屏幕由MaterialApproutes构建器实例化。
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点击按钮导航到另一个屏幕。结果如下:
enter image description here
当我尝试通过按键盘的完成按钮使TextField失去焦点时,不会发生此行为。根据按下完成按钮时的源代码,TextFieldclearComposing上调用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/

相关文章:

c++ - 控制台键盘命中检测和解释

windows - 在 Windows 中使用 CAPS LOCK 作为 Vim 模式切换键

dart - Flutter:FloatingActionButton 阴影

flutter - 在ListWheelScrollView中获取子项的值

flutter - 为什么像这样分配 Future 函数时 pumpAndSettle 超时

performance - Canvas 多个文本绘制性能

assembly - 如何将 ASM 程序包含到我的 Turbo Basic 程序中?

flutter - 如何在类型转换中解析 'Timestamp'类型不是 'String'类型的子类型

user-interface - 在Flutter上使用ChangeNotifierProvider选择另一个选项卡时,如何更改AppBar的颜色?

google-chrome-extension - 修改关于延迟库的 dart2js 输出