文章目录
- 一、入口方法的定义方式
 - 二、Dart变量和常量
 - 三、Dart常用数据类型
 - 四、Dart运算符与类型转换及循环语句
 - 五、自定义方法
 - 六、Dart静态成员、操作符、类的继承
 - 七、接口
 - 八、接口分离写法
 - 九、一个类实现多个接口
 
一、入口方法的定义方式
main(){
	print('hello world')
}
//下边这种方法中void表示没有返回值
void main(){
	print('你好dart')
}
 
二、Dart变量和常量
var str = 'hello'   
Srting srt = 'hello'
int srt = 123
//两种命名变量的方式
const a = 123
final a = 123 
//他们两个是用来声明常量的
区别是
final 可以接受一个可变的数值 例如 New Date()
而const 就不可
 
三、Dart常用数据类型
1. 字符串类型
	var || String 声明   
	拼接字符串与js相比多了一种拼接方式
例如:
	String str = "hello"
	var str2 = "world"
	print("$str $str2"){
	
	}
	//就会打印str + str2 一样的 "hello world"
	
2. 数值类型
 int整数值 //只有整数
 double浮点值  double包含整数和小数
 
3. 运算符
+ - * / %
4.布尔值
true false 
4. 条件判断
 if语句 和js一样
 
5. 数组/集合类型
 第一种声明和js一样
  var list=['aaa','a',0,1]
  
 第二种声明可指定类型
 var list = <String>["这里边必须是指定类型数据"]
 
 数组添加的方式 js是通过push...
 它可以通过add添加
 var list = []
 list.add(1)
 
 第三种声明方式 固定长度
 var list = List.filled(2,"") 创建一个长度固定为2的数组集合 默认值""
  可指定类型 不可以增加 可修改数据 修改方式 => list[0]=1
  
6. maps类型 类型对象
第一种方式
var data={
	"name":"xxx",
	"age":20
}
 
第二种
var data = new Map()
data["name"] = "XXX"
data["age"] = 12
类型判断 is
var str = ""
str is String 返回布尔值
 
四、Dart运算符与类型转换及循环语句
1. 算数运算符
  +、 - 、* 、/ 、 ~/取整 、 %
  ~/取整  a~/b 意思就是a/b的值取整
2. 关系运算符
  == ~= > < >= <=
3. 逻辑运算符
  ! && ||
4. 赋值运算符
  =  ??=
  ??=  a??=12意思就是a的值空吗是的话就把12赋值给a
  += -= *= /= %= ~/=
  ++  --  (++,--在前先运算再赋值,在后先赋值再运算)
5. 条件表达式
   if else  switch case
   三目运算符(三元表达式)
 
类型转换
	1. 转化为String类型 toString()
	2. 转化为Number类型 double.parse() || int.parse()
 
try  ... catch  抛出异常
	try{
	XXXX	
	}catch(err){
	//如果XXXX部分代码报错则执行此作用域内代码
	}
 
isEmpty:判断字符串是否为空
isNotEmpty:判断是否不为空
str.isEmpty
 
for循环 和js一样
for(int i = 1; i<100; i++){
	parint(i)
}
do while
单个while和if类似,不过只要条件仍满足则扔执行
	do {
			先执行一次再判断
			while中的条件满足,满足则继续执行
			continue;//表示跳过本次循环
			break;//跳出循环
		}while(条件)
 
数组常用方法
length属性 长度
reversed属性 翻转并转换数组(3,2,1)这样的括号
toList方法 转换(3,2,1)为数组[3,2,1]
add()  添加单个数据
addAll() 添加多个数据,也可用来拼接
indexOf() 查找并返回索引否则返回-1
remove() 传递具体的值删除
removeAt() 传入索引删除
fillRange() 修改,接受三个参数,(起始位置,结束为止,修改的值)
insert()也是接收三个参数,起始,结束,值;用来插入值
insertAll() 插入多个值 两个参数(插入下标位置,插入的值(可以是数组))
join(',') 转换为字符串
split(',') 转化为数组
for in 循环对象
forEach循环
	可以没有箭头
XX.forEach((val){
		print("$value")  
})
map函数
where函数
any函数 只要又满足条件的就返回true
every 每一项都要满足否则就返回false
 
五、自定义方法
void 自定义名称(){
	print("自定义方法")
}
void main() {
	自定义名称()//调用
	
	int 方法2(){
	//也可以在这里定义方法 
	return 666
 	}
 	var a=方法2()
 	print(a)
}
自执行方法
((a){
	print(a)
})(参数);
 
class类
 定义类
 
 使用类
 
 默认就执行构造函数
 
 简写方式
 
 类单独抽离成一个组件或方法
- 创建一个dart文件,定义好类,
 - import “路径” 引入 即可使用
 
私有属性
 必须是一个单独的文件
 属性或方法前面加_下划线即可为私有属性或者私有方法
 不过仍可以间接获取,通过调用共有方法仍可获取到
getter setter修饰符
 
 
 初始化列表

六、Dart静态成员、操作符、类的继承
Dart静态成员
 

 操作符
Dart中的对象操作符
?条件运算符
as 类型转换
is 类型判断
.. 级联操作
 

 连缀操作
 
类的继承
 
 如果继承类调用方法自己有的话则调用自己的,没有才会去父类找


多态
 
七、接口
/*
和Java一样,dart也有接口,但是和Java还是有区别的。
  首先,dart的接口没有interface关键字定义接口,而是普通类或抽象类都可以作为接口被实现。
  同样使用implements关键字进行实现。
  但是dart的接口有点奇怪,如果实现的类是普通类,会将普通类和抽象中的属性的方法全部需要覆写一遍。
  
  而因为抽象类可以定义抽象方法,普通类不可以,所以一般如果要实现像Java接口那样的方式,一般会使用抽象类。
  建议使用抽象类定义接口。
*/
/*
定义一个DB库 支持 mysql  mssql  mongodb
mysql  mssql  mongodb三个类里面都有同样的方法
*/
abstract class Db{   //当做接口   接口:就是约定 、规范
    late String uri;      //数据库的链接地址
    add(String data);
    save();
    delete();
}
class Mysql implements Db{
  
  @override
  String uri;
  Mysql(this.uri);
  @override
  add(data) {
    // TODO: implement add
    print('这是mysql的add方法'+data);
  }
  @override
  delete() {
    // TODO: implement delete
    return null;
  }
  @override
  save() {
    // TODO: implement save
    return null;
  }
  remove(){
      
  }
  
}
class MsSql implements Db{
  @override
  late String uri;
  @override
  add(String data) {
    print('这是mssql的add方法'+data);
  }
  @override
  delete() {
    // TODO: implement delete
    return null;
  }
  @override
  save() {
    // TODO: implement save
    return null;
  }
}
main() {
  Mysql mysql=new Mysql('xxxxxx');
  mysql.add('1243214');
  
  
}
 
八、接口分离写法

 
九、一个类实现多个接口

 之后再入口调用类
 
未完待续



















