经过这段时间的学习和阅读源码发现flutter的构造方法主要有如下几种.
其中通过ConstructC
和 ConstructI
使用比较常用.
ConstructF
不常用,主要用于分离初始化参数和构造类完成后需要立即执行的方法
小结: 语法过于复杂,感觉没有章法,没有很 括号/冒号/大括号,阅读性较差. 建议在时机开发中规范写法,项目固定1~2种写法及可。
以下为测试代码
void main() {
ConstructA(name: "a");
ConstructB(name: "b");
ConstructC(name: "c");
ConstructD(name: "d");
ConstructF(name: "f");
ConstructI(name: "i");
}
class ConstructA {
String name;
ConstructA({String name}) {
this.name = name;
print("construct method $name");
}
}
class ConstructB {
String name;
ConstructB({String name}) {
this.name = name;
print("construct method $name");
}
}
//语法糖,参数多的时候类型看不到,不够友好
class ConstructC {
String name;
ConstructC({this.name});
}
class ConstructD {
String name;
ConstructD({String name}) : this.name = name;
}
//初始化并执行方法
class ConstructF {
String name;
ConstructF({String name}) : this.name = name {
print("construct method ConstructF");
}
}
//单例构工厂函数
class ConstructI {
factory ConstructI({String name}) => ConstructI._(name);
String name;
ConstructI._(String name)
: this.name = name;
}
//打印结果
·“
construct method a
construct method b
construct method ConstructF
”
另外一种写法
- 通过内置私有方法,外置工厂方法或构造方法
()
,可以将我们的类限定为一个单利。 - 下面代码是我在查看
@pragma('vm:entry-point')
注解时发现的,抛开传入参数,我们在此基础上稍加改动在里面加上一个静态实例进行非空判定就能轻松实现单利了。
/** Creates a hint named [name] with optional [options]. */
const factory pragma(String name, [Object options]) = pragma.;
const pragma.(this.name, [this.options]);