Flutter 入门 - Key

217 阅读1分钟

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();