一、命名规则
1.变量名称必须由数字、字母、下划线和美元符($)组成
2.标识符开头不能是数字
3.标识符不能是保留字和关键字
4.变量的名字是区分大小写的如: age和Age是不同的变量。在实际的运用中,也建议,不要用一个单词大小写区分两个变量
5.标识符(变量名称)一定要见名思意 :变量名称建议用名词,方法名称建议用动词
二、常量
Dart中常用的定义常量的方法:
const:值不变 一开始就得赋值。
final :可以开始不赋值 只能赋一次 ;
具有const的编译时常量的特性;
运行时常量(惰性初始化),即在运行时第一次使用前才初始化。
三、变量
特点:不预先定义变量类型 ,自动会类型推倒。
var关键字可以通过类型来申明变量,举例:
var str='我是变量';
String str='我是变量';
注意:var 后就不要写类型 ,写了类型不要var ;两者都写 var a int = 5; 报错。
dart里面有类型校验,举例:
var str='';
str=1234;
会提示报错。
四、数据类型
1.Numbers(数值)
int:必须是整型。
double:既可以是整型 也可是浮点型。
都可使用运算符 + - * / %
2.Strings(字符串)
定义方法:
var str1='this is str1';
var str2="this is str2";
String str1='this is str1';
String str2="this is str2";
String str1='''this is str1;
String str1=""";
3.Booleans(布尔)
4.List(数组)
(1)定义
1、基本
var l1=["张三",20,true];
2、指定类型
var l2=<String>["张三","李四"];
3、通过[]创建的集合它的容量可以变化,增加数据
var aa = [];
aa.add("张三");
(2)属性
length 长度
reversed 翻转
isEmpty 是否为空
isNotEmpty 是否不为空
(3)常用方法
add 增加
addAll 拼接数组
indexOf 查找 传入具体值
remove 删除 传入具体值
removeAt 删除 传入索引值
fillRange 修改
insert(index,value); 指定位置插入
insertAll(index,list) 指定位置插入List
toList() 其他类型转换成List
join() List转换成字符串
split() 字符串转化成List
forEach
map
where
any
every
5.Maps(字典)
(1)定义
1.第一种
var person={
"name":"张三",
"age":20,
"work":["程序员","送外卖"]
};
print(person["name"]);
2.第二种
var p=new Map();
p["name"]="李四";
print(p["name"]);
(2)属性
keys 获取所有的key值
values 获取所有的value值
isEmpty 是否为空
isNotEmpty 是否不为空
(3)常用方法
remove(key) 删除指定key的数据
addAll({...}) 合并映射 给映射内增加属性
containsValue 查看映射内的值 返回true/false
forEach
map
where
any
every
6.不常用数据类型
(1)Runes
Rune是UTF-32编码的字符串。它可以通过文字转换成符号表情或者代表特定的文字。
Runes input = new Runes('\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}');
print(new String.fromCharCodes(input));
(2)Symbols
程序中声明的运算符或标识符
(3)is
is 关键词来判断类型
五、运算符
1.算术运算符
+(加) -(减) *(乘) /(除) ~/ (取整) %(取余)
2.关系运算符
==(是否相等) !=(是否不等) >(是否大于) <(是否小于) >=(是否大于等于) <=(是否小于等于)
3.逻辑运算符
!(取反) &&(并且) ||(或者)
4.赋值运算符
基础赋值运算符:
=(直接赋值) ??=(判断是否为空,为空将值赋给它)
复合赋值运算符:+= -= *= /= %= ~/=
5.条件表达式
if else
switch case
三目运算符
??运算符:
6.类型转换
Number类型转换成String类型 toString()。
String类型转成Number类型 int.parse()
六、循环
1.自增/自减
++ --
2.for循环
for (int i = 1; i<=100; i++) {
print(i);
}
3.while
while(表达式/循环条件){
}
do{
语句/循环体
}while(表达式/循环条件);
4.中断
break;
continue
七、Dart类
1.dart面向对象特征
(1)特征
封装
继承
多态:父类定义一个方法不去实现,让继承他的子类去实现,每个子类有不同的表现。子类的实例赋值给父类的引用。
(2)特点
Dart所有的东西都是对象,所有的对象都继承自Object类。
Dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类。
class Person{
String name="张三";
int age=23;
void getInfo(){
// print("$name----$age");
print("${this.name}----${this.age}");
}
void setInfo(int age){
this.age=age;
}
}
一个类通常由属性和方法组成。
2.泛型
(1)泛型方法
解决 类 接口 方法的复用性、以及对不特定数据类型的支持(类型校验)。
不指定类型放弃了类型检查。我们现在想实现的是传入什么 返回什么。
T getData<T>(T value){
return value;
}
(2)泛型类
class MyList<T> {
List list = <T>[];
void add(T value) {
this.list.add(value);
}
List getList() {
return list;
}
}
(3)泛型接口
同一功能,按照接口约束实现。
3.mixins
(1).特点
- 作为mixins的类只能继承自Object,不能继承其他类
- 作为mixins的类不能有构造函数
- 一个类可以mixins多个mixins类
- mixins绝不是继承,也不是接口,而是一种全新的特性
- mixins的类型就是其超类的子类型
(2).用法
class A {
String info="this is A";
void printA(){
print("A");
}
}
class B {
void printB(){
print("B");
}
}
class C with A,B{
}
4.类
(1)抽象类
子类可以继承抽象类,也可以实现抽象类接口。
- 抽象类通过abstract 关键字来定义
- Dart中的抽象方法不能用abstract声明,Dart中没有方法体的方法我们称为抽象方法。
- 如果子类继承抽象类必须得实现里面的抽象方法
- 如果把抽象类当做接口实现的话必须得实现抽象类里面定义的所有属性和方法。
- 抽象类不能被实例化,只有继承它的子类可以
extends抽象类 和 implements的区别?
- 如果要复用抽象类里面的方法,并且要用抽象方法约束自类的话我们就用extends继承抽象类
- 如果只是把抽象类当做标准的话我们就用implements实现抽象类
(2)接口
dart的接口没有interface关键字定义接口,而是普通类或抽象类都可以作为接口被实现。同样使用implements关键字进行实现。
如果实现的类是普通类,会将普通类和抽象中的属性的方法全部需要覆写一遍。而因为抽象类可以定义抽象方法,普通类不可以,所以一般如果要实现像Java接口那样的方式,一般会使用抽象类。
建议使用抽象类定义接口。
(3)Dart 类中的静态成员 静态方法
- 使用static 关键字来实现类级别的变量和函数
- 静态方法不能访问非静态成员,非静态方法可以访问静态成员
(4)类的继承
- 子类使用extends关键词来继承父类
- 子类会继承父类里面可见的属性和方法 但是不会继承构造函数
- 子类能复写父类的方法 getter和setter
5.库
(1)本地库
import 'lib/xxx.dart';
(2)系统内置库
- dart:core:内置类型,数字,字符串,集合和其他核心功能。
- dart:async:支持异步编程,包括Future和Stream等类。
- dart:math:数学常数和函数,以及随机数生成器。
- dart:convert:不同数据表示之间进行转换的编码器和解码器,包括 JSON 和 UTF-8 。
(3)Pub包管理系统中的库
Pub包管理系统中的库的地址:
https://pub.dev/packages
https://pub.flutter-io.cn/packages
https://pub.dartlang.org/flutter/
举例:
- 需要在自己想项目根目录新建一个pubspec.yaml
- 在pubspec.yaml文件 然后配置名称 、描述、依赖等信息
- 然后运行 pub get 获取包下载到本地
- 项目中引入库 import 'package:http/http.dart' as http;
(4)部分导入
模式一:只导入需要的部分,使用show关键字:
import 'package:lib1/lib1.dart' show foo;
模式二:隐藏不需要的部分,使用hide关键字:
import 'package:lib2/lib2.dart' hide foo;
(5)注意
引库冲突时,使用as 给包重命名
最后
文件最后,附上文章对应的Dart相关的思维导图对应的图片。