大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
未初始化的变量值都是null
创新互联建站基于分布式IDC数据中心构建的平台为众多户提供光华机房服务器托管 四川大带宽租用 成都机柜租用 成都服务器租用。
var可以接受任意类型的变量,但一旦被赋值,类型就会被确定。
dynamic可以接受任意类型的变量,被赋值后,类型还可以再被赋值再改变。
final与const都可以修饰一个不可变的变量,但final变量是一个运行时常量,在第一次使用的时候被初始化。
const变量是一个编译时常量,在编译的时候就被初始化了。所以,const的性能比final高。
a?.cancel():a不为空才会执行a的cancel()方法
var i = a??"a是空":a是空时,将a赋值为字符串"a是空"
k??="1":如果k之前没有赋值,则会被赋值为“1”,如果之前有值,这句话就无效。
例如有一个函数:String say(String from, String msg, [String device])
那么device可以传也可以不传值,下面两种调用方式都是对的。
例如有一个函数:void fun1({int i,int j}),
使用时:fun1(i = 1)、fun1(j = 10)、fun1(i = 10,j = 20)都可以。
可选位置参数和可选命名参数都可以设置默认参数值
例如:
void fun1({int i = 1,int j = 2})
String say(String from = "a", String msg = "b", [String device = "c"])
1、Avoid empty catch blocks.
如果try catch 中的catch没有任何实现则需要把catch的e异常改为_即可消除警告
2、Prefer const with constant constructors.
意思是需要加上const常量修饰符
3、Prefer using if null operators.
发生在使用三目运算符当中
4、The '!' will have no effect because the receiver can't be null.
在定义空安全之后的使用中
5、Don't access members with this unless avoiding shadowing.
引用了this关键字
6、SizedBox for whitespace.
使用Container布局
6、Unnecessary new keyword.
创建布局控件时使用new关键字
7、Avoid using braces in interpolation when not needed.
日志输出的时候对于单独的变量使用了大括号
8、Use key in widget constructors.
定义的StatefulWidget 中没有添加构造方法
9、The method doesn't override an inherited method.
定义方法之前添加了@override
Flutter有生成构造函数、默认构造函数、命名构造函数、重定向构造函数、常量构造函数、工厂构造函数
生成构造函数是最常见的构造函数,即生成实体类对象。
如果未声明构造函数,则会提供默认构造函数。 默认构造函数没有参数,并调用父类无参数构造函数。
默认情况下,子类中的构造函数调用父类的未命名无参数构造函数。 父类的构造函数在子类构造函数体的开头被调用。 如果还使用初始化了列表,则会在调用父类构造函数之前执行。 执行顺序如下:
如果父类没有未命名的无参数构造函数,则必须手动调用父类中的一个构造函数。 在子类的构造函数体之后用冒号(:)指定父类构造函数
当需要定义一个有特别含义的构造函数的时候,可以通过命名构造 形式:构造函数.XXX来命名构造函数
有时构造函数需要重定向到同一个类中的另一个构造函数,在冒号后面用this:
如果你的类需要成为永远不会更改的对象,则可以使这些对象成为编译时常量。 定义const构造函数要确保所有实例变量都是final。
不用直接创建对象(可以通过调用其他构造函数创建)