GlobalKey 和 GlobalKeyObject 有什么区别?

2024-03-20

我想知道两者之间的区别,更重要的是现实世界的使用差异GlobalKey and GlobalObjectKey,什么时候使用哪个,什么时候避免?


唯一的区别在于他们的方式==操作员行为

  • 全局密钥 https://api.flutter.dev/flutter/widgets/GlobalKey-class.html仅等于其自身:
final first = GlobalKey();
final second = GlobalKey();
print(first == second); // false
  • two 全局对象键 https://api.flutter.dev/flutter/widgets/GlobalObjectKey-class.html如果它们的对象相等,则 s 相等:
final first = GlobalObjectKey(42);
final second = GlobalObjectKey(42);
final third = GlobalObjectKey(21);
print(first == second); // true
print(first == third); // false

这很重要,因为 Flutter 依赖于比较 Widgetkey using ==看看它是否应该保留该小部件的状态,或者销毁先前的状态并创建一个新的状态。

它们的用法略有不同。

全局密钥 https://api.flutter.dev/flutter/widgets/GlobalKey-class.html通常会在一个内部使用StatefulWidget,或者密钥将存储为全局变量:

class Example extends StatefulWidget {
  @override
  _ExampleState createState() => _ExampleState();
}

class _ExampleState extends State<Example> {
  // Stores the GlobalKey inside the widget State
  final key = GlobalKey<FormState>();

  @override
  Widget build(BuildContext context) {
    return Form(
      key: key,
      child: ...
    );
  }
}

这种方法是使用 a 的最灵活的方法全局密钥 https://api.flutter.dev/flutter/widgets/GlobalKey-class.html-喜欢。但这也是最冗长的

全局对象键 https://api.flutter.dev/flutter/widgets/GlobalObjectKey-class.html作为该用法的简化。它允许在内部使用全局键StatelessWidget对于稍微不太详细的代码,但需要一个唯一的“对象”。

典型的用法是:

class Example extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final key = const GlobalObjectKey('my_form_key');
    return Form(
      key: key,
      ...
    );
  }
}

这不太冗长。但我们需要确保该对象传递给GlobalObjectKey是该小部件所独有的,并且不会随时间而改变。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GlobalKey 和 GlobalKeyObject 有什么区别? 的相关文章

随机推荐

  • 测试控制器有意义吗

    我有一个简单的 MVC 应用程序 由视图 gt 控制器 gt 服务 gt 模型组成 我的控制器真的很瘦 他们所做的就是调用服务方法并填充 ModelAndView 对控制器进行单元测试以确保它们在完全模拟服务的同时在 ModelAndVie
  • 查询以搜索所有包中的表和/或列

    是否可以运行查询来搜索所有包以查看包中是否使用了特定的表和 或列 包太多 无法打开每个包并查找我正在寻找的值 你可以这样做 select from user source where upper text like upper SOMETE
  • 困惑:Django“无法导入app.views”但可以导入app,在WSGI中?

    我遇到了一个奇怪的 Django 问题 使用 mod wsgi 运行 Django 姜戈正在寻找urls py 然后说 ViewDoesNotExist Could not import app views Error was No mod
  • 在 .dot 树中强制执行水平节点排序

    我正在尝试使用 GraphViz 重新创建二叉搜索树的示例图 它最终应该是这样的 这是我的第一次尝试 digraph G nodesep 0 3 ranksep 0 2 margin 0 1 node shape circle edge a
  • 将值从文本文件传递到数组

    我的代码有一些问题 我的程序根据来自输入文件的三个带的颜色计算电阻值 然后打印到输出文件 输入文件示例 红 绿 蓝绿色 灰色 黄色 输出文件示例 电阻 欧姆 680电阻 千欧姆 1420 然而 每次我运行该程序时它都会崩溃 我进行了一些调试
  • ngrx 和 ngxs 之间的性能差异? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想在我的 Angular 6 应用程序中使用 ngxs 进行状态管理 但我不确定它对于大型项目是否成熟 我找不到任何有关 ngrx 和 ngx
  • 是否可以定义一个包含对象的对象?

    我有这个对象 var a 1 topicId 1 subTopicId 1 topicName x subTopicName x 2 topicId 1 subTopicId 2 topicName x subTopicName x 62
  • roc_auc_score 和plot_roc_curve 结果不同

    我正在训练一个RandomForestClassifier sklearn 预测信用卡欺诈 然后当我测试模型并检查 rocauc 分数时 我在使用时会得到不同的值roc auc score and plot roc curve roc au
  • React ApexCharts 按时间间隔更新图表

    我正在构建一个 React 应用程序 它将显示一些需要通过 api 调用不断更新的图表 使用 ApexCharts 它们将显示来自不同来源的传感器数据 我根据需要设计和配置了图表 但是如果我通过更改状态数组来更新数据setInterval表
  • AngularJs $q 承诺与 async/await 兼容吗?

    我正在使用 TypeScript 版本分别为 9 07 1 5 11 和 3 7 5 开发 Angular AngularJs 混合应用程序 我们所有的 HTTP 请求 甚至是由新的 Angular 组件发出的请求 都使用以纯 Javasc
  • 在 Clojure 中使用引用

    在 clojure 中引用会导致不评估 a and a返回相同的结果 a 和 a 之间有什么区别 一个不评估 另一个评估自身 但这与不评估相同吗 a是简写 quote a eval quote form 回报form根据定义 也就是说 如果
  • Angular 2 错误和 Typescript - 如何调试?

    我刚刚开始了一个学习 Angular2 和 Typescript Javascript 的项目 我有 Java 背景 我调试项目的方法通常是堆栈跟踪 编译错误以及 在较大的项目上 大量测试用例的组合 然而 其中大部分似乎并没有直接转化为网络
  • 如何在 C 程序中最好地实现字符串到数字的映射

    我有一组明确的字符串及其对应的数字 kill gt 1 live gt 2 half kill gt 3 dont live gt 4 列表包含 30 个这样的字符串及其数字映射 如果用户输入 kill 我需要返回1 如果他输入 dont
  • Azure 缓存无法跨 VIP 交换保留会话状态?

    作为这篇文章的后续 在 Azure 云服务中启用共置会话缓存 https stackoverflow com questions 20964697 enabling co located session caching in an azur
  • 使用参数而不是硬编码字符串时,Postgres 查询非常慢

    我遇到了这个 Postgres 问题 如果我使用参数而不是在查询字符串上硬编码其值 则相同的查询需要很长时间才能执行 列名称是 media type 它是 VARCHAR 20 我使用 Symfony2 和 Doctrine2 ORM 从
  • Sqlite3 ON DELETE CASCADE 不起作用

    我的数据库中有多个表 我将仅使用其中 2 个作为示例 篮表 CREATE TABLE Basket id basket integer primary key autoincrement title text 电脑桌 CREATE TABL
  • 根据值计数计算的数据透视表字段

    我有一个数据透视表 在值中我有一些字段的计数 Region Count of Actuals Count of Budgets Percentage of Actuals Asia 40 80 我想在数据透视表 实际值百分比 中添加一个计算
  • Kendo UI 网格 - 客户端模板:转义 # 符号

    我正在使用 Kendo UI 的网格以及 Twitter Bootstrap Twitter Bootstrap 有一个内置的弹出窗口 模式 可以通过以下方式调用 a href class text yellow Login a 在我的 K
  • 如何在 React 中从 eslint 解析器中排除 css 文件

    我需要从 eslint 解析器中排除 css 文件 目前当我跑步时eslint src 这是检查所有文件 包括 css 文件 请在下面找到我的 eslintrc 文件内容 module exports parser babel eslint
  • GlobalKey 和 GlobalKeyObject 有什么区别?

    我想知道两者之间的区别 更重要的是现实世界的使用差异GlobalKey and GlobalObjectKey 什么时候使用哪个 什么时候避免 唯一的区别在于他们的方式 操作员行为 全局密钥 https api flutter dev fl