1、每局末尾都要加分号;
2、变量命名
String name = 'kobe';
print('${name} + "brnt");
3、变量类型
var/dynamic/const/final 变量名称 = 赋值;
4、箭头语法(arrow syntax)
sum(num1, num2) => num1 + num2;
movies.forEach((item) => print(item));
//等价于
sum(num1, num2) {
return num1 + num2;
}
movies.forEach((item) {
print(item);
});
5、命名可选参数: {param1, param2, ...}
可以有默认值,可以指定某个参数必选
printInfo(String name, {int age, double height = 170.0, @required String address}) {
print('name=$name age=$age height=$height address=$address');
}
6、??
name2 ??= 'james'; //为null时,赋值james
var name = temp ?? 'kobe';
7、级联语法:..
final p1 = Person();
p1.name = 'why';
p1.run();
final p2 = Person()
..name = "why"
..run();
8、构造函数
Person(String name, int age) {
this.name = name;
this.age = age;
}
// 等同于
Person(this.name, this.age);
命名构造函数:假的函数重载
Person.withArgments(String name, int age) {
this.name = name;
this.age = age;
}
var p = new Person.withArgments('kobe', 18);
9、初始化列表(Initializer list)
Point(this.x, this.y) {
this.x = x;
this.y = y;
this.dis = x * x + y * y;
}
//等价于
Point(this.x, this.y) : dis = x * x + y * y;
10、重定向构造方法
Person(this.name, this.age);
Person.fromName(String name) : this(name, 0);
11、常量构造方法const
传入相同值时,返回同一个对象
class Person {
final String name;
const Person(this.name);
}
var p1 = const Person('why');
var p2 = const Person('why');
print(identical(p1, p2)); // true
注意:构造方法和变量名要用const修饰,成员变量要用final修饰
12、工厂构造方法factory
传入相同值时,返回同一个对象
static final Map<String, Person> _cache = <String, Person>{};
factory Person(String name) {
if (_cache.containsKey(name)) {
return _cache[name];
} else {
final p = Person._internal(name);
_cache[name] = p;
return p;
}
}
Person._internal(this.name);
13、Dart中的继承使用extends关键字
14、抽象类使用abstract关键字
15、implements关键字
默认情况下,定义的每个类都相当于默认也声明了一个接口,可以由其他的类来实现(因为Dart不支持多继承)
abstract class Runner {
run();
}
abstract class Flyer {
fly();
}
class SuperMan implements Runner, Flyer {
@override
run() {
print('超人在奔跑');
}
@override
fly() {
print('超人在飞');
}
}
16、Mixin with关键字
通过implements实现某个类时,类中所有的方法都必须被重新实现,可以通过mixin关键字来定义一个类,with关键字混入,只重写你需要的方法。
mixin Runner {
run() {
print('在奔跑');
}
}
mixin Flyer {
fly() {
print('在飞翔');
}
}
// implements的方式要求必须对其中的方法进行重新实现
// class SuperMan implements Runner, Flyer {}
class SuperMain with Runner, Flyer {
}
17、泛型:Object/T
class Location {
Object x;//T x;
Object y;//T y;
Location(this.x, this.y);
}
class Location<T extends num> ;//限制类型,只能是num
18、库的使用
import 'dart:io';//dart标准版
import 'package:flutter/material.dart';//Pub包的一些库,三方库
import 'lib/student/student.dart';//自定义的dart文件
//show显示某个成员(屏蔽其他)
import 'lib/student/student.dart' show Student, Person;
//hide隐藏某个成员(显示其他)
import 'lib/student/student.dart' hide Person;
//当各个库有命名冲突的时候,可以使用as关键字来使用命名空间
import 'lib/student/student.dart' as Stu;
Stu.Student s = new Stu.Student();
//自己组合现有的dart文件成自定义的库
library utils;
export "mathUtils.dart";
export "dateUtils.dart";
import "lib/utils.dart";
网友评论