返回

Flutter中的各种Key详解:轻松掌握🔑的奥秘

前端

什么是Key?

在Flutter中,Key是一个特殊的对象,它可以帮助我们唯一地标识一个Widget。Key有许多不同的类型,每种类型都有其独特的用法。

LocalKey

LocalKey是一个相对简单的Key,它只在当前Widget树中有效。这意味着,如果一个Widget被移出了当前Widget树,那么它的LocalKey也就失效了。

ValueKey

ValueKey是一个比较常用的Key,它可以用来标识一个Widget的特定值。这意味着,即使一个Widget被移出了当前Widget树,只要它的ValueKey没有改变,那么它仍然可以被找到。

ObjectKey

ObjectKey是一个比较特殊的Key,它可以用来标识一个Widget的特定对象。这意味着,即使一个Widget被移出了当前Widget树,只要它的ObjectKey没有改变,那么它仍然可以被找到。

UniqueKey

UniqueKey是一个非常特殊的Key,它可以用来标识一个Widget的唯一性。这意味着,即使一个Widget被移出了当前Widget树,只要它的UniqueKey没有改变,那么它仍然可以被找到。

GlobalKey

GlobalKey是一个非常强大的Key,它可以用来标识一个Widget的全局唯一性。这意味着,即使一个Widget被移出了当前Widget树,只要它的GlobalKey没有改变,那么它仍然可以被找到。

LabeledGlobalKey

LabeledGlobalKey是一个比较特殊的GlobalKey,它可以用来标识一个Widget的全局唯一性,同时还可以为它指定一个标签。这意味着,即使一个Widget被移出了当前Widget树,只要它的LabeledGlobalKey没有改变,那么它仍然可以被找到,而且可以通过标签来访问它。

GlobalObjectKey

GlobalObjectKey是一个比较特殊的GlobalKey,它可以用来标识一个Widget的全局唯一性,同时还可以为它指定一个对象。这意味着,即使一个Widget被移出了当前Widget树,只要它的GlobalObjectKey没有改变,那么它仍然可以被找到,而且可以通过对象来访问它。

GlobalKey的用法

GlobalKey的使用非常简单,只需要在创建Widget时为它指定一个GlobalKey即可。例如:

final GlobalKey _key = GlobalKey();

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Center(
      child: Text(
        'Hello World!',
        key: _key,
      ),
    ),
  );
}

LocalKey的用法

LocalKey的使用也比较简单,只需要在创建Widget时为它指定一个LocalKey即可。例如:

final LocalKey _key = LocalKey('my_key');

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Center(
      child: Text(
        'Hello World!',
        key: _key,
      ),
    ),
  );
}

ValueKey的用法

ValueKey的使用也比较简单,只需要在创建Widget时为它指定一个ValueKey即可。例如:

final ValueKey _key = ValueKey('my_value');

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Center(
      child: Text(
        'Hello World!',
        key: _key,
      ),
    ),
  );
}

ObjectKey的用法

ObjectKey的使用也比较简单,只需要在创建Widget时为它指定一个ObjectKey即可。例如:

final ObjectKey _key = ObjectKey(my_object);

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Center(
      child: Text(
        'Hello World!',
        key: _key,
      ),
    ),
  );
}

UniqueKey的用法

UniqueKey的使用也比较简单,只需要在创建Widget时为它指定一个UniqueKey即可。例如:

final UniqueKey _key = UniqueKey();

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Center(
      child: Text(
        'Hello World!',
        key: _key,
      ),
    ),
  );
}

LabeledGlobalKey的用法

LabeledGlobalKey的使用也比较简单,只需要在创建Widget时为它指定一个LabeledGlobalKey即可。例如:

final LabeledGlobalKey _key = LabeledGlobalKey('my_label');

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Center(
      child: Text(
        'Hello World!',
        key: _key,
      ),
    ),
  );
}

GlobalObjectKey的用法

GlobalObjectKey的使用也比较简单,只需要在创建Widget时为它指定一个GlobalObjectKey即可。例如:

final GlobalObjectKey _key = GlobalObjectKey(my_object);

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Center(
      child: Text(
        'Hello World!',
        key: _key,
      ),
    ),
  );
}

总结

以上就是Flutter中各种Key的详细介绍,希望对大家有所帮助。在实际开发中,我们可以根据需要选择合适的Key来使用。