dart入口函数 第一种写法
1 2 3 main(){ print ('hello dart!' ) }
第二种写法void 代表此函数没有返回值
1 2 3 void main(){ print ('hello dart!' ) }
变量 dart是一个强大的脚本类语言,可以不预先定义变量类型 ,自动会类型推倒。定义变量可以通过var关键字,也可以通过类型来申明变量,比如:
1 2 3 4 5 var str='this is var' ; String str='this is var' ; int str=123 ;
注意:var后就不要写类型 ,写了类型就不要var,两者都写var a int = 5; 则会报错
常量 final and const
const值不变 一开始就得赋值 final 可以开始不赋值 只能赋一次 ; 而final不仅有const的编译时常量的特性,最重要的它是运行时常量,并且final是惰性初始化,即在运行时第一次使用前才初始化。
1 2 3 4 5 final name = 'Bob' ; final String nickname = 'Bobby' ; const bar = 1000000 ; const double atm = 1.01325 * bar;
数据类型 常用的数据类型 Keyword 描述 int 整数类型 double 浮点数类型 bool 布尔类型 String 字符串类型 List 数组 Map 键值对(字典类型)
String 单引号 和 双引号 都可以使用!
注意: String 还可以使用三个引号来表示多行!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 var str = '一串字符' ;var str1 = "一串字符" ;String str = '一串字符' ;String str1 = "一串字符" ;String moreLine = '''一串字符; 一串字符 一串字符 ''' print ('$str $str1 ' );print (str + str1);
int 整数类型
1 2 3 4 5 6 int a = 1 ;var b = 3 ;print (a)print (b)
double 浮点类型
1 2 3 4 5 6 double a = 1.2 ;var b = 3.3 ;print (a)print (b)
bool 布尔类型
1 2 3 4 5 6 bool a = true ;var b = false ;print (a)print (b)
List 数组集合
注意: []中括号声明集合的方式内容长度是可以动态变化的!
混合类型数组 数组元素可包含 String int bool等混合元素!
1 2 var arr = ['张三' , 15 , '男' , '未婚' , true ]
通过arr.length获取数组的长度,以及可以通过指定下标获取对应的值arr[0]
指定类型数组 数据单方面指定类型存值
1 2 3 4 5 6 var age = <int >[15 ,17 ,18 ]var name = <String >['张三' ,'李四' ,'王五' ]name.add('狗蛋儿!' )
创建固定长度集合 固定长度,创建后,就无法在进行元素添加,长度也无法修改!
1 2 3 4 5 6 7 8 var fixedArr = List .filled(3 , 'val' )var fixedArr = List <String >.filled(3 , 'val' )
Map 键值对集合
对象式定义 1 2 3 4 5 6 7 8 9 10 11 var person = { "name" : '张三' , "age" : 18 , "hobbies" : ['打游戏' ,'看小说' ,'看动漫' ] } print (person['name' ]) print (person['hobbies' ])
使用Map实例来定义 1 2 3 4 5 6 7 8 9 10 11 var person = new Map ();person['name' ] = '张三' ; person['age' ] = 20 ; person['hobbies' ] = ['打游戏' ,'看小说' ,'看动漫' ] print (person['name' ]); print (person['hobbies' ]);
类型判断 1 2 3 4 5 6 7 8 9 10 main(){ var str = '1412321' ; if ( str is String ){ print ('String' ); } if ( str is int ){ print ('Number' ); } }
运算符 逻辑或(||) 字符 需要特殊处理,不然会被当作表达式显示出来!
类型 运算符 算数运算符 +、 -、 *、 /、 ~/(取整)、 %(取余) 关系运算符 ==、 !=、 >、 <、 >=、 <= 逻辑运算符 !(取反)、 &&(并且)、 ||(或) 赋值运算符 = 、??=、 +=、-=、*=、/=、%=、 ~/=(取整)
条件表达式 if else 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 if ( 条件 ) {} if ( 条件 ) { } else { } if ( 条件 ) { } else if ( 条件2 ) { } else { }
switch 1 2 3 4 5 6 7 8 9 10 11 var sex = '男' ;switch (sex){ case '男' : print ('男' ); break ; case '女' : print ('女' ); break ; default : print ('性别' ); } break ;
三目运算符 1 2 3 var score = 60 var result = score > 60 ? '大于60' : '不大于60' ;print (result)
?? 运算符 ?? 标识 左侧表达式成立 则将左侧结果 赋值于变量,否则就是将右侧的值赋值与变量!
1 2 var age = 20 var result = age ?? 18
类型转换 String to int or to double 注意:如果 `String`类型的值为 或者 null,解析就会报错! 解析前做一判断控制,若无法解析,则默认为0!
1 2 3 4 5 6 7 8 9 var str = '12314' ;var toInt = int .parse(str);print (toInt is int )var str = '12.12' var toDouble = double .parse(str);print (toDouble is double )
Int or double to String 1 2 3 4 5 6 7 8 9 var intVal = 1241 var doubleVal = 12.1 var result1 = intVal.toString();var result2 = doubleVal.toString();print (result1 is String )print (result2 is String )
to bool 布尔类型转换 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 26 27 28 var str = 'aaa' if (str.isEmpty){ print ('为空!' ) } else { print ('不为空!' ) } var num = 0 if (num == 0 ){ print ('为零!' ) } else { print ('不为零!' ) } var value;if (value == null ){ print ('为null!' ) } else { print ('不为null!' ) } var result = 0 /0 ;if (result.isNaN){ print ('为isNaN!' ) } else { print ('不为isNaN!' ) }
循环 for 循环 普通数组
1 2 3 4 5 List arr = ['张三' ,'李四' , '王五' ];for ( var i = 0 ; i < arr.length; i++) { print (arr[i]); }
复杂数组
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 26 27 28 29 30 31 List arr = [{ "cate" : '分类1' , "news" : [{ "title" : '标题1' , "content" : '内容1' },{ "title" : '标题2' , "content" : '内容2' }], "cate" : '分类2' , "news" : [{ "title" : '标题1' , "content" : '内容1' },{ "title" : '标题2' , "content" : '内容2' }] }]; for ( var i = 0 ; i < arr.length; i++) { print (arr[i]['cate' ]) for ( var j = 0 ; j < (arr[i]['news' ].length; j++) { print (arr[i]['news' ][j]['title' ]) if ( arr[i]['news' ][j]['title' ] == '标题2' ) { break ; } } }
while 循环 满足条件下执行循环
1 2 3 4 5 6 7 8 9 int i = 10 ;while (i < 10 ){ print (i); i++; if ( i == 5 ) { break ; } }
do while 循环 先循环后 在做条件
1 2 3 4 5 int i = 10 ;do { print (i); i++; }while ((i < 10 )
`while`循环第一次判断不成立则不做循环操作; `do while`第一条件不关满不满足 都要循环一遍后在做判断条件!
break 和 continue break 跳出循环后不在进行下一次循环; continue 跳出本次循环进入下一次循环;
集合 List 创建List集合 可包含多类型的一组集合
1 var arr1 = ['张三' , '李四' , true , age]
可指定类型的一组集合
1 var arr1<String > = ['张三' , '李四' ]
使用 List 创建一个集合
1 2 3 4 List arr1 = ['张三' , '李四' , true , age]List arr1<String > = ['张三' , '李四' ]
创建一个固定长度的集合
1 2 3 4 List arr1 = List .filled(2 , '' )List arr1 = List <String >.filled(2 , '' )
固定长度的集合,不允许添加新的元素! 修改内容的话可以通过下标的方式来修改 `arr1[0] = 张三`
List 常用属性 属性 描述 length 属性 reversed 翻转 isEmpty 是否为空 isNotEmpty 是否不为空
List 常用方法 方法 描述 add 增加 addAll 拼接数组 indexOf 查找 remove 删除 具体值 removeAt 删除 具体索引值 fillRange 修改 insert 指定位置(索引)插入 insertAll 指定位置(索引)插入 List toList 其他类型转换为 List join List 转换为字符串 split 字符串转换为 List forEach 迭代器 map map 迭代器 where 迭代器 any 迭代器 every 迭代器
add 方法 1 2 3 List arr = ['香蕉' , '西瓜' , '苹果' ]arr.add('油桃' )
addAll 方法 数组合并
1 2 3 List arr = ['香蕉' , '西瓜' , '苹果' ]arr.addAll(['猕猴桃' , '油桃' ])
indexOf 方法 传入要查找的具体值,若有返回该值的索引位置,若无则返回-1
1 2 3 4 5 List arr = ['香蕉' , '西瓜' , '苹果' ]arr.indexOf('西瓜' ) arr.indexOf('樱桃' )
remove 方法 具体值
1 2 3 List arr = ['香蕉' , '西瓜' , '苹果' ]arr.remove('西瓜' )
removeAt 方法 具体索引值
1 2 3 List arr = ['香蕉' , '西瓜' , '苹果' ]arr.remove(2 )
fillRange 方法 修改数组中的元素 fillRange(start, end, [required value])start 对应的索引值 [‘0-香蕉’,’1-西瓜’,’2-苹果’]end 对应的具体位置 [‘1-香蕉’,’2-西瓜’,’3-苹果’]
1 2 3 4 5 6 7 8 List arr = ['香蕉' , '西瓜' , '苹果' ]arr.fillRange(1 , 3 , 'aaa' ) arr.fillRange(1 , 2 , 'aaa' )
注意: `start` 为数组索引值
insert 方法 具体索引值 位置下插入新的value! 插入一个值
1 2 3 List arr = ['香蕉' , '西瓜' , '苹果' ]arr.insert(1 ,'insert' )
insertAll 方法 具体索引值 位置下插入新的[value]! 插入多个值!
1 2 3 List arr = ['香蕉' , '西瓜' , '苹果' ]arr.insertAll(1 ,['insert1' ,'insert2' ])
join 方法 参数以字符串,具体将数组以字符串进行分割,最终以字符串格式返回!
1 2 3 4 5 List arr = ['香蕉' , '西瓜' , '苹果' ]arr.join(',' ) arr.join('-' )
split 方法 指定字符将字符串转换为数组!
1 2 3 4 5 6 7 String str = '香蕉,西瓜,苹果' ;String str2 = '香蕉-西瓜-苹果' ;str.split(',' ) str.split('-' )
Set 创建 Set 集合 Set 集合中的元素可以去重!
1 2 3 4 5 6 7 8 var mySet = new Set ();mySet.add('张三' ); mySet.add('李四' ); mySet.add('王五' ); mySet.add('王五' ); print (mySet)
Set 集合 转 List1 2 3 4 5 6 7 8 var mySet = new Set ();mySet.add('张三' ); mySet.add('李四' ); mySet.add('王五' ); mySet.add('王五' ); print (mySet.toList())
使用Set来去重List 1 2 3 4 5 6 7 8 9 var arr = ['张三' , '李四' , '李四' , '王五' ]var mySet = new Set ();mySet.addAll(arr) mySet.toList()
Map 创建一个Map映射 1 2 3 4 5 6 7 8 9 10 11 12 13 14 var person = { "name" : "张三" , "age" : 18 } Map person = { "name" : "张三" , "age" : 18 } person["name" ] = "李四"
常用的属性 属性名 描述 keys 获取所有的key值 values 获取所有的value值 isEmtpy 是否为空 isNotEmpty 是否不为空
常用的方法 方法名 描述 remove(key) 删除指定的key addAll({…}) 合并映射 给映射内增加属性 containsValue(value) 查看映射的值 返回 true / false
迭代器 for…in 1 2 3 4 5 var arr = ['张三' ,'李四' ,'王五' ];for ( item in arr ) { print (item) }
forEach 1 2 3 4 5 6 7 8 9 10 11 12 13 14 var arr = ['张三' ,'李四' ,'王五' ];arr.forEach((value) => { print (item) }) var person = { "name" : "张三" } person.forEach((key, value) => { print ("$key --- $value " ) })
map 1 2 3 4 5 6 7 var arr = ['张三' ,'李四' ,'王五' ];var newArr = arr.map((value) => { return "I am $value " }) newArr.toList()
where 返回满足条件的数据,相当于JS中的 filter方法!
1 2 3 4 5 6 7 var arr = ['张三' ,'李四' ,'王五' ];var newArr = arr.where((value) => { return item === '李四' }) newArr.toList()
every 数组每一项都满足条件返回 true 否则 false!
1 2 3 4 5 var arr = ['张三' ,'李四' ,'王五' ];var newArr = arr.every((value) => { return item === '李四' })
any 数组中有一项满足条件返回true 否则false!
1 2 3 4 5 var arr = ['张三' ,'李四' ,'王五' ];var newArr = arr.any((value) => { return item === '李四' })