在我的 flutter 应用程序中,我有一个文本字段,我希望能够通过点击不可交互的组件来移除焦点。这不是颤振中文本字段的默认行为,因此我需要找到一种手动执行此操作的方法。我按照https://flutterigniter.com/dismiss-keyboard-form-lose-focus/和其他各个页面上的步骤进行了一些操作,其中涉及根部的 GestureDetector 和 onTap,看起来像这样:
onTap: () {
FocusScopeNode cf = FocusScope.of(context);
if (!cf.hasPrimaryFocus && cf.focusedChild != null) {
cf.focusedChild.unfocus();
cf.unfocus();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我选择文本字段时,单击其他位置(此时焦点似乎消失),打开时间选择器,然后关闭该时间选择器,文本字段再次聚焦。如果我通过单击键盘上的“完成”按钮来取消文本字段的焦点,那么打开/关闭时间选择器将不会重新聚焦文本字段,所以我知道这一定是我取消焦点的方式有问题。散焦的正确方法是什么,这样焦点就不会像那样回来了?
我理解借用、特征或结构拥有生命周期意味着什么,但对我来说,为什么类型会有生命周期是没有意义的。我对类型的理解是,它们是在编译时使用的抽象,并且它们根本不需要存在于二进制文件中。例如,具有两个 int 的结构、两个 int 的元组以及两个 int 的固定大小数组在编译时应全部映射到内存中相同的值排列,并且代码将使用字节偏移量来查找这两个价值观。如果我的观点是正确的,那么生命周期的概念根本不应该应用于类型,因此以下两个结构是等效的:
pub struct Foo<T> {
foo: T
}
pub struct Bar<T: 'static> {
bar: T
}
Run Code Online (Sandbox Code Playgroud)
除了等效之外,语法根本不存在。我一定是误解了什么,广泛的谷歌搜索也没有帮助。类型生命周期的目的是什么?什么时候应该使用它们?