一、数据类型
基本数据类型
- int
- double
- String 字符串类型,用单引号或者双引号都可以。
- bool 布尔类型,需要注意的是dart不同于c语言可以再if语句中用int型代替bool类型。
列表 - List 列表支持随机访问,类似于java的数组
//直接定义
var list =[];
//用泛型显示声明一个集合
List<int> list=[1,2,3,4,5];
list.add(7);
print(list[2]);
//创建一个固定长度的集合
List<String> lsit=List.filled(2,"");
//List当中的常见方法
List list = ['苹果','桃子','猴子'];
print(list.length); //输出长度
print(list.reversed); //反转数组
print(list.isEmpty); //判断是否为空
print(list.isEmpty); //判断是否为空
list.add("西瓜");//添加元素
//list.addAll(新数组);//合并数组
list.indexOf('西瓜');//查找某个元素
list.remove('西瓜');//删除某个元素 传入具体值
list.removeAt(2);//删除某个元素 传入下标
list.fillRange(0, 1,'aaa');//修改元素 前闭后开
list.insert(0, '你好');//插入元素,参数为下标和对象
list.join(',');//把List转为字符串,并且用,链接
- Set Set集合当中的元素是不重复并且无序的,不支持随机访问,具有更好的查找性能。
//用泛型显示声明一个集合
Set<String> set={'dart','flutter'};
set.add("value");
print((set.length==3));
//如果用var声明一个空集合,那我们必须显示的声明泛型
var set = <int>{}; //或者Set<String> set={};
- Map 类似于java。这里的Map也是一个键值对结构,键和值用冒号隔开,如果用var声明一个空Map那么会吧{}推导为默认类型,如果想要声明一个Set,那必须在前面加上泛型。
//map直接赋值
Map<String,String> map={'dart':'flutter','map':'映射'};
//声明为空的map
var map={};
//先初始化再赋值
Map map1 = Map<String,String>();
map1['你好']='ligou';
//如果没有定义泛型的话可以这样定义 map1['好']=['我是1','我是2'];
print(map1['你好']);
//Map常用属性和方法
Map map = {'你好':'李哥'};
map.keys;//输出所有的key
map.values;//输出所有的values
map.isEmpty;//判断是否为空
//map.addAll(map名称)//拼接字典
map.containsKey('你好');//是否存在某个k
map.remove('你好');//删除某个k
map['哈哈']='呵呵';//添加元素
- is 关键字来判断类型
var a = 123;
if(a is int){
print('yes');
}
二、逻辑控制
1.if语句
- 和java没有什么区别
if(a>b){
print(a);
}else{
print(b);
}
2.for语句
- 第一种写法和java的for循环一样
//入门级别用法
for(int i = 0; i <5;i++){
print(i); //1 2 3 4 5
}
//集合套map
List list = [{'title':'董瑞龙'},{'title':'李狗'},{'title':'马狗'},];
for(int i = 0; i<list.length;i++ ){
print(list[i]['title']); //董瑞龙 李狗 马狗
}
//类似二维数组的嵌套
List list2 =[
{
'creat':'国内',
'news':[
{'title':'中国第一线'},
{'title':'中国第二线'}
]
},
{
'creat':'国外',
'news':[
{'title':'国外第一线'},
{'title':'国外第二线'}
]
}
];
for(int i = 0 ;i<list2.length;i++){
//print(list2[i]['creat']);
for(int j = 0;j<list2[i]["news"].length;j++){
print(list2[i]['news'][j]['title']); //中国第一线 中国第二线 国外第一线 国外第二线
}
}
- 第二种写法和js当中的for in类似
List list = [1,2,3,4,5];
for(int a in list){
print(a); // 1 2 3 4 5
}
3.while语句
- 用法和java类似
int a = 5;
while(a>0){
print(a); // 5 4 3 2 1
a--;
}
- 用一下continue和break。
List<int> list = [1,2,3,4,5];
for(int a in list){
if(a<2){
continue;
}
if(a==4){
break;
}
print(a); // 2 3
}
4.其他循环控制语句
- forEach
List list=['你好','哈哈'];
list.forEach((value) {
print(value); //你好 哈哈
});
- map
List list=[1,2];
var newlist=list.map((value) {
return value*2;
});
print(newlist.toList()); //[2,4]
- where
//输出满足条件的语句
List list=[1,2,5,9,7];
var newlist=list.where((element) => element>2);
print(newlist.toList());//[5,9,7]
- any
// 判断是否有满足条件的值,返回值为布尔类型
List list=[1,2,5,9,7];
var newlist=list.any((element) => element>2);
print(newlist); //true
- every
// 集合内的元素是否都满足条件,返回值为布尔类型
List list=[1,2,5,9,7];
var newlist=list.any((element) => element>2);
print(newlist); //false
三、方法
- 普通函数就不多做讲解了,和java一样的。下面介绍几种java当中没有的函数
- 定义一个带可选参数的方法
//这里定义了一个可选参数的函数,中括号当中的参数是可选的
void main(){
print(userInfo('董瑞龙',20,'女'));
}
String userInfo(String name,[var age,var sex]){
if(age!=null) {
return "年龄:$age ---性别:$sex";
}
return " 年龄:$age";
}
- 定义一个带默认参数的方法
//这里直接在参数后面加上等于号赋值就可以创建一个带有默认参数的方法。
void main(){
print(userInfo('董瑞龙',20));
}
String userInfo(String name,[var age,var sex="女"]){
if(age!=null) {
return "年龄:$age ---性别:$sex";
}
return " 年龄:$age";
}
四、面向对象编程
1.类和对象
- Dart类的创建和使用与Java是非常相似的,写个例子就不多做介绍了。
//创建了一个people类
class Peopel{
String name = '张三';
int age = 10 ;
String getInfo(){
return 'name=${this.name} -- age=${this.age}';
}
}
void main(){
Peopel p = new Peopel();
print(p.name);
print(p.getInfo());
}
- 继承(和java一样,关键字为extends)
class Animal{
void walk(){
print("正在走");
}
}
class Cat extends Animal{
void walk(){
super.walk();
print("cat is running");
}
}
- 抽象类(抽象类需要用abstract来声明,当子类继承抽象类之后必须重写抽象类当中的所有抽象方法)
abstract class Animal{
void walk(){
}
}
class Cat extends Animal{
void walk(){
super.walk();
print("cat is running");
}
}
- 接口 Dart的接口和Java是有一定区别的,首先在定义上Dart的接口没有interface关键字定义接口,而是普通类或抽象类都可以作为接口被实现。实现的关键字都是implement。
五、一些新特性
- ?可空类型
//首先来看下这段代码,这段代码是会报The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.错误的
int a =10;
a=null;
//如果加入?符号就表示可以为空,这样就不会报错了
int ?a =10;
a=null;
- ! 类型断言
String ?str="da";
str=null;
print(str!.length);
`**加粗样式**``