1.flutter中const与final区别
Dart语言中Const和final关键字都用于声明常量,但它们在使用场景和特性上有显著区别。
定义
const:用于声明编译时常量,其值在编译时确定,且一旦赋值后不可更改。
final:用于声明运行时常量,其值在运行时确定,但一旦赋值后不可更改。final变量可以在运行时计算其值,例如通过构造函数或其他方法。例如:final int myFinalVar = calculateValue();
当const
修饰类的构造函数时,它要求该类的所有成员都必须是final
的
class ConstObject {
final value;
//ERROR, 必须是 final 变量。
int value2;
const ConstObject(this.value);
log() {
print(value);
}
}
存储位置
在Flutter中,使用const
修饰的变量存储位置与在C语言中有所不同。在Flutter中,const
主要用于声明常量值,而不是直接关联到内存区域。尽管Dart的文档没有明确指出const
修饰的变量存储在具体哪个内存区域,但从其行为和特性来看,这些常量通常会被存储在只读数据段中。
static
class Page1 {
int currentPage = 1;
static void scorllDown() {
///错误:static方法不能访问普通成员变量
currentPage = 1;
print("ScrollDown...");
}
void scorllUp() {
currentPage ++;
print("ScrollUp...");
}
}
class Page2 {
// 添加 static 关键字
static int currentPage = 1;
static void scorllDown() {
currentPage = 1;
print("ScrollDown...");
}
void scorllUp() { ///普通成员方法可以访问static成员变量
currentPage ++;
print("ScrollUp...");
}
}
2.wiget中的key
在Flutter中,Key是一个用于标识widget的对象,它的作用有以下几个:
1.区分不同的widget
Key可以帮助Flutter区分不同的widget。当我们在widget树中添加、移除或更新一个widget时,Flutter需要确定哪些widget需要被修改或重新构建。如果两个widget具有相同的Key,则Flutter会将它们视为同一个widget,并且不会重复构建。
2.提高性能
通过使用Key,Flutter可以更加高效地处理widget树的构建和更新。例如,在