flutter - GlobalKey 和 GlobalKeyObject 有什么区别?

标签 flutter dart

我想知道 GlobalKey 之间的区别,更重要的是现实世界的用法区别。和 GlobalObjectKey ,什么时候使用哪个,什么时候避免?

最佳答案

唯一的区别是他们的==运算符(operator)行为

  • GlobalKey仅等于自身:

  • final first = GlobalKey();
    final second = GlobalKey();
    print(first == second); // false
    
  • 两个GlobalObjectKey如果它们的对象相等,则 s 相等:

  • final first = GlobalObjectKey(42);
    final second = GlobalObjectKey(42);
    final third = GlobalObjectKey(21);
    print(first == second); // true
    print(first == third); // false
    

    这很重要,因为 Flutter 依赖于比较 Widget 的 key使用 ==看看它是否应该保留那个小部件的状态,或者相反地销毁以前的状态并创建一个新的状态。

    它们的用法略有不同。

    GlobalKey通常在 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 use a GlobalKey -喜欢。但这也是最冗长的

    GlobalObjectKey是对这种用法的简化。它允许在 StatelessWidget 中使用全局键对于稍微不那么冗长的代码,但需要一个唯一的“对象”。

    一个典型的用法是:

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

    这不那么冗长。但是我们需要确保传递给GlobalObjectKey的对象是这个小部件独有的,不会随着时间而改变。

    关于flutter - GlobalKey 和 GlobalKeyObject 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60944586/

    相关文章:

    dart - 有没有办法从 setMethodCallHandler 获取 Future?

    firebase - 为什么在onPressed时此AlertDialog不起作用?

    flutter - 如何删除为endDrawer自动添加的appbar中的尾随汉堡包

    google-app-engine - 如何以最低成本配置 App Engine?

    dart - 如何在 flutter 中动态设置 Root View ?

    flutter - 在flutter中,State类中声明的变量和该状态的build方法中声明的变量有什么区别?

    flutter - 如何在动态 ListView 中导航到下一页 - Flutter

    flutter - 如何使用计时器更新小部件

    android - 使用Flutter将文本基线与列内的文本对齐

    bloc 的 flutter bloc 最佳实践