1.新增了箭头函数 =>
2.函数参数,可以是一个函数
3.函数可以赋值给一个变量
4.新增了命名构造函数
Person.xxx
这样可以方便定义各种构造函数,不用通过传入的参数,来区分各种构造函数
5.Dart没有 public private 这些属性修饰符
把方法或者属性,定义成私有,在前面加下划线_
但是注意的是,这个类,需要在另外一个文件里面,通过import引入进来的。否则还是可以被访问到。
私有属性:
String name; 变为: String _name;
而不是 _ String name
私有方法:
void run 变为: void _run
而不是 _void run
6. 类型转换,变为 as
var p1="123"; p1 as Object;
7.类型判断 变为 is
Person p;
if(p is Person){
}
8.新增问号,加上就空安全了 ?
Person p;
p?.run();
这个时候,就不会报错。
9.新增类型断言,感叹号表示 !
如果是空安全的变量,加上!,这样为空的话,就可以抛出异常
10.新增级联操作符,两个点..
作用就是可以连续写,一个对象写一次
Person p;
p.name="x1";
p.age=1;
变为:
Person p;
p..name="x1"
..age=1;
11.接口
dart的接口没有interface关键字定义接口,一般如果要实现像Java接口那样的方式,一般会使用抽象类。 建议使用抽象类定义接口。
12.新增 mixins,类似多继承
class c with A,B{
}
这样就有了A 和 B里面的方法
13.泛型
T getData<T>(T value){
return value;
}
调用:
getData<int>(12);
这样可以传入不特定类型,也限制了不特定类型。
14.引入库
a.自定义库
import 'lib/xxx.dar';
b.系统内置库
import 'dart:io';
c.第三方库,使用pub包管理器
1.项目根目录新建 pubspec.yaml
2.里面加入想要的依赖
3.运行pub get
4.引入
import 'package:http/http.dart' as http;
15.增加await、async、Future,做异步任务
async只是用来表示,方法里面有异步,没有其他暖用。
await,表明这个是个异步方法。
16.新增late,延迟初始化属性
比如类有一个 String name;如果你不在构造函数初始化它,那么就必须改为:
late String name;
表示我一会儿再去初始化。
17.新增required,表示有些可变参数,允许是空值。如果不加,这些参数必须先赋值才行。
void printInfo(String username,{int age,String sex}){
}
上面这样会报错。
必须改为下面这样:
void printInfo(String username,{required int age,required String sex}){
}
16. 可以在class外定义变量,方法等
17.创建对象,new可选
18.Dart 所有变量如果未初始化都为 null ,不像 java int 的默认值是 0, boolean 的默认值是 false
19.构造函数简化
class Rectangle { num width; num height; Rectangle({this.width = 0, this.height = 0}); }
20.字符串可用单引号或者双引号
21.工厂构造函数 => 在抽象类中定义工厂函数,规定子类实例化方式
abstract class Shape { //factory constructor factory Shape(String type){ if(type == 'circle') return Circle(10); if(type == 'square') return Square(10); throw 'can\'t create $type'; } num get area; }
22.函数无需声明可能抛出的异常类型
23.捕获异常
try { // ··· } on Exception catch (e) { print('Exception details:\n $e'); } catch (e, s) { print('Exception details:\n $e'); print('Stack trace:\n $s'); }finally{ }
24.动态类型 Dart 还有dynamic
关键字
25.
没有float类型,int和double都是num的子类
26.
27.没有数组只有列表
28.
29.
30.
31.
32.
33.
34.