gpt4 book ai didi

flutter - GlobalKey 和 GlobalKeyObject 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 02:52:31 25 4
gpt4 key购买 nike

我想知道 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com