开场引入
在Flutter中,Key是Widget的唯一标识,它在构建Widget树的过程中发挥着关键作用,帮助Flutter框架高效地识别,比较和复用Widget,从而提升应用性能。
正式回答
Key的两种主要类型
1)、GlobalKey
GlobalKey在整个生命周期中保持唯一和持久,它可以跨Widget树的不同部分使用,甚至在Widget树重构后依然有效。
GlobalKey常用于访问特定Widget的内部状态或方法。
2)、LocalKey
LocalKey在构建阶段被创建,用于在当前构建上下文中标识Widget,当Widget树被创建时,LocalKey帮助框架识别哪些Widget可以被重建, 哪些需要重新创建。
LocalKey的生命周期与构建过程相关联,一旦构建结束,LocalKey就不在有效。
Key在Flutter中的主要作用:
1)、Widget的识别与比较:
Key帮助框架识别Widget,当Widget树发生变化时,框架会使用Key来比较旧树和新树,确定哪些Widget需要保留,哪些需要创建或销毁。
2)、Widget的复用:
通过使用Key,Flutter框架可以识别出在新旧Widget树中相同Key的Widget,从而避免不必要的重建,提高应用性能。
3)、控制Widget的重建:
在使用如ListView或GridView等可滚动组件时,为每个item分配一个唯一的Key,可以控制哪些item需要重新构建,从而提高性能。
4)、状态管理与访问:
GlobalKey可以用于跨Widget访问状态,例如,用于获取表单字段的值或触发复杂Widget的方法调用。
总结:
Key是Flutter框架中不可或缺的一部分,它不仅帮助提升应用的性能,还提供了控制Widget重建和访问内部状态的能力,是实现高效和响应式用户界面的关键。
Key类型 适用场景
ValueKey 列表项(值唯一时)
ObjectKey 复杂对象的列表
UniqueKey 强制重建(如动画重置)
GlobalKey 跨组件访问状态
String 转 int
/// get int by value str.
static int? getIntByValueStr(String valueStr, {int? defValue = 0}) {
return int.tryParse(valueStr) ?? defValue;
}
/// get double by value str.
static double? getDoubleByValueStr(String valueStr, {double? defValue = 0}) {
return double.tryParse(valueStr) ?? defValue;
}
int number = 123;
String numberStr = number.toString();