Flutter 学习 - Dart 基础
- Dart Dart 里面所有的东西都是对象,包括 int ,函数 这些对象的父类是 Object ,
函数也是一个对象,类型为 Function ,
定义常量
在定义变量前加上 final 或 const 关键字
- final 可以在运行期间确定值,一旦确定就不能改变了 ,如何赋值无所谓,但是赋值后就不能再改了。
- const 表示变量在编译期间就能确定的值,也就是定义 const 常量的时候,必须直接赋一个字面值,而不是一个变量或者公式
var i=3; final value=i*3; const name=i*3; //错误 Not a constant expression void main() { print("$value"); //9 // print("$name"); // Not a constant expression }
Dart 类定义
在声明变量与方法时,在前面加上“”即可作为 private 方法使用。如果不加“”,则默认为 public 。不过,“_”的限制范围并不是类访问级别的,而是库访问级别。
在 Dart 中,你可以对同一个类进行继承或者接口实现
- 继承父类,子类又父类派生,会自动获取父类的成员变量和实现方法,子类可以根据需求复写构造函数以及父类方法
- 接口实现,子类获取的仅仅是接口的成员变量符合和方法符号,需要重新实现成员变量,以及方法的声明和初始化,否则编译期会报错。
当然还有第三种方式,即混入,
混入 Mixin
可以理解为多继承,使用 with 关键字,主要是为了鼓励代码复用的,
void main() {
var c=Coordinate();
c.printInfo(); //(0,0)
c.name="haha";
c.printName();//name : haha
print(c is Student);//true
print(c is Point); //true
}
class Point { num x = 0, y = 0; void printInfo() => print('($x,$y)');}
class Student {
String name;
void printName()=>print("name : $name");
}
class Coordinate extends Student with Point {}
Dart 特殊操作符
- ??
color = _color ?? Colors.blue 如果 _color 不为 null ,则返回 _color ,否则,返回 Colors.blue
- ..
.. 级联符号,允许你对同一对象执行一系列操作,除了函数调用,还可以访问同一对象上的字段,
Paint paint = new Paint() ..color = _color ?? Colors.blue ..strokeCap = StrokeCap.round ..strokeWidth = 4.0 ..style = PaintingStyle.stroke;
- ??= // 如果 b 为空,则将值分配给b;否则, b 保持不变 b ??= value;
b??=value ; 等价于 b=(b==null)?value:b;
- ?. 和.差不多,但是左边的操作数可以为空,
class User{
String name;
}
void main() {
User user;
print(user?.name); //输出的是null
print(user.name);//会出异常,Cannot read property 'get$name' of nullError:
}
setter/getter
Dart 语言会隐士的定义 setter 方法,针对非空的变量会额外增加 getter 方法
直接使用 get /set关键字 来复写 getters 和 setters 方法
String 和 Java 中的一样,检测两个 String 的内容是否一致,使用 == 简单两个对象是否是同一个对象,使用 identical 函数
operator
Dart 的一个关键字 和运算符一起使用,表示一个运算符的重载函数,可以理解将 operator 和运算符视为一个函数名
bool operator ==(other) {
....
}
重载了==运算符
Object 和 dynamic 都可以接受任意类型的参数
- Object ,表示接受任意类型,系统保证其类型安全
-
dynamic 告诉编译期,知道自己在做什么,不用做类型检测
- is 关键字, 判断该对象是否是某种类型
- as 关键字 ,进行强制类型转换
Dart 可以抛出任意类型的对象
Dart 使用 package 的概念管理源码和可见性,没有 public 和 private 之类的访问权限控制,默认情况下,所有的符号都是公开的,如果不想某个变量对包的外部可见,可以使用下划线开头给变量命名
搬运地址:
极客时间《Flutter核心技术与实战》
既已览卷至此,何不品评一二: