Dart语言

基础

抽象类(接口)

抽象类通常用来定义接口,以及部分实现。
在 Dart 中没有 interface 这个关键字,只有 abstract,所以可以使用 abstract 来生成接口:

1
2
3
4
5
6
7
8
9
abstract class Demo{
void zhujiang();
}

class Zhu implements Demo{
@override
void zhujiang() {}
}

如果想 extents 多个类的话需要使用 with 关键字,可以多继承

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
abstract class Demo{
void zhujiang();
}

abstract class Demo2{
void zhujiang();
}

abstract class Demo3{
void zhujiang();
}

class Zhu extends Demo with Demo2,Demo3 implements Demo3,Demo2{
@override
void zhujiang() {}
}

变量的默认值

不要被之前的Java所禁锢,比如之前的Boolean值默认会是false,但是在Dart中的bool值默认也是null,记着,一切皆对象,对象的默认值为null

num类型
int和double是num的子类

1
2
3
//int和double都是num的子类
num n1 = 1;
num n2 = 1.0;

dynamic ,var、object

dynamic
所有 dart 对象的基础类型,在大多数情况下,不直接使用它通过它定义的变量会关闭类型检查,这意味着 dynamix x= ‘hal’; x.foo (); 这段静态类型检查不会报错,但是运行时会 crash,因为 x 并没有 foo() 方法,所以建议大家在编程时不要直接使用 dynamic;

var
是一个关键字,意思是”我不关心这里的类型是什么”,系统会自动判断类型 runtimeType;

object
是 Dart 对象的基类,当你定义: object o =xxx ;时这个时候系统会认为 o 是个对象,你可以调用 o 的 toString () 和 hashCode () 方法因为 Object 提供了这些方法,但是如果你尝试调用o.foo () 时,静态类型检查会运行报错。综上不难看出 dynamic 与 object 的最大的区别是在静态类型检查上。

构造函数

位置可选参数,只需要将可选参数放入中括号即可,例子如下;
func_text (a, [b = 4]) { }
匿名函数
var a = (b, c){ return b + c; };
//一般构造方法的书写格式
Person (this. name, this. age);

freezed 1.1.0  深度拷贝,语法扩充

Get.off () 导航到下一个页面并删除前一个页面
Get.offAll () 导航到下一个页面并删除以前所有的页面

多构造函数

1
2
3
4
5
6
7
8
9
10
class FeeDetails {

FeeDetails(this.title, this.content);

FeeDetails.three(this.title,this.content,this.describe);

String? content;
String? describe;
String? title;
}

. then ()的用法

1
2
3
4
5
6
7
8
9
10
11
Future.wait([
// 2秒后返回结果
Future.delayed(new Duration(seconds: 2), () {
return "hello";
}),
// 4秒后返回结果
Future.delayed(new Duration(seconds: 4), () {
return " world";
})]).then((results){
print(results[0]+results[1]);}).catchError((e){
print(e);});

可以使用三个单引号创建多行字符串对象

1
2
3
String d = '''ssss
fffffffgg
grrrr''';

定义函数时可省略类型(不建议)

1
2
3
4
5
main(){
test(){
// return null;
}
}

Dart中函数是Function类型的对象。所有的函数都返回一个值。如果没有指定返回值,则 默认把语句 return null; 作为函数的最后一个语句执行。

支持缩写语法 => (Kotlin是用=来实现)

1
2
3
4
test()=> "zhujiang";
String test1(){
return "zhujiang";
}

函数别名

用typedef给函数起一个别名,使用比较方便。例如定义一个方法的回调,直接使用别名定义。没返回值,则只要参数匹配就行了,如果定义了返回值,则返回值不一样会报错。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
typedef Fun1(int a, int b);
typedef Fun2<T, K>(T a, K b);
int add(int a, int b) {
print('a + b');
return a + b;
}
class Demo1 {
Demo1(int f(int a, int b), int x, int y) {
var sum = f(x, y);
print("sum1 = $sum");
}
}
class Demo2 {
Demo2(Fun1 f, int x, int y) {
var sum = f(x, y);
print("sum2 = $sum");
}
}
class Demo3 {
Demo3(Fun2<int, int> f, int x, int y) {
var sum = f(x, y);
print("sum3 = $sum");
}
}

调用

1
2
3
Demo1(fun1, 5, 10);
Demo2(add, 5, 10);
Demo3(add, 5, 10);

级联:..
这个其实就是链式调用

1
2
StringBuffer stringBuffer = StringBuffer();
stringBuffer..write("sss")..write("ssss");

unknown_filename
unknown_filename.1

Setter和Getter
在Java中get和set方法可以直接生成,在Dart中无需自己定义。每个实例变量都隐含的具有一个 getter, 如果变量不是 final 的则还有一个 setter。


Dart语言
http://peiniwan.github.io/2024/04/eab780e538bb.html
作者
六月的雨
发布于
2024年4月6日
许可协议