我想知道 GlobalKey
之间的区别,更重要的是现实世界的用法区别。和 GlobalObjectKey
,什么时候使用哪个,什么时候避免?
最佳答案
唯一的区别是他们的==
运算符(operator)行为
final first = GlobalKey();
final second = GlobalKey();
print(first == second); // false
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/