唯一的区别在于他们的方式==
操作员行为
-
全局密钥 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
是该小部件所独有的,并且不会随时间而改变。