【笔记】Flutter的Key

前言

Flutter通过不重复的Key作为唯一标识,来保存组件的状态和顺序

LocalKey局部键

  • 只在组件内有效

ValueKey

  • 手动定义标识

<key>:自定义字符串作为标识

1
Box(key: ValueKey("<key>"));

UniqueKey

  • 由程序自动定义随机的标识
1
Box(key: UniqueKey());

ObjectKey

  • 通过传递对象,将对象的地址作为键

<obj>:任意对象

1
Box(key: ObjectKey(<obj>));

GlobalKey全局键

  • 在全局有效

定义全局Key

1
GlobalKey globalKey = GlobalKey();

使用全局Key

1
Box(key: globalKey);

获取子组件的State

1
var boxState = globalKey.currentState as BoxState;

获取子组件State的属性值

1
boxState.属性名;

修改子组件State的属性值

1
boxState.属性名 = 值;

调用子组件State的方法

1
boxState.方法名();

获取子组件的Widget

1
var boxWidget = globalKey.currentWidget as Box;

获取子组件Widget的属性

1
boxWidget.属性名;

获取子组件的Context

1
var renderBox = globalKey.currentContext!.findRenderObject() as RenderBox;

获取子组件Context的属性

1
renderBox.属性名;

完成

参考文献

哔哩哔哩——筱筱知晓