Key 的分类
直接子类主要有:LocalKey和GlobalKey
- LocalKey,它应用于具有
相同父Element的Widget进行比较,也是diff算法的核心所在; - GlobalKey,通常我们会使用GlobalKey某个Widget对应的Widget或State或Element
LocalKey
ValueKey
ValueKey是当我们以特定的值作为key时使用,比如一个字符串、数字等等
UniqueKey
唯一 key
ObjectKey
使用对象为 key
GlobalKey
GlobalKey 可以帮助我们访问 widget 的信息, 或者 element
class HomeWidget extends StatefulWidget {
HomeWidget({Key key}) : super(key: key);
final message = "message";
@override
_HomeWidgetState createState() => _HomeWidgetState();
}
class _HomeWidgetState extends State<HomeWidget> {
final name = "name";
void test() {
print("testtest");
}
@override
Widget build(BuildContext context) {
return Container();
}
}
如果想调用上面 widget 的 name 或者 message常量以及 test 方法,可以通过绑定 key 来调用。
GlobalKey<_HomeWidgetState> homekey = GlobalKey();
调用如下:
//currentState == _HomeWidgetState
// _HomeWidgetState 引用 widget
print(homekey.currentState.name);
print(homekey.currentState.widget.message);
//可以直接调用 test 方法
homekey.currentState.test();