Flutter基础知识
Flutter是Google公司发布的一个用于创建跨平台、高性能觉得移动端应用的UI框架,可以在iOS和Android上快速搭建原生用户界面。
Flutter框架,其实是一个跨平台的移动端开发框架,使用的是Dart语言,它通过Dart实现的SDK。
Dart语言
Dart语言是面向对象的、类定义的、单继承的语言。
1. Dart的内置数据类型
数据类型 | 说明 | 实例 |
---|---|---|
String | 字符串类型 | var str1=‘Single quotes.’ 或 var str2=“Double quotes.” |
int | 整型 | var num1=1; |
double | 64位双精度浮点数 | var num3=1.2; |
bool | 布尔类型 | var bol=true; |
List | 列表 | var list1=[1,2,3,6,7,8] 或者 var list2=[‘Apple’,‘Banana’,‘Cherry’,‘Durian’] |
Map | 键值映射 | var map1={‘a’:‘apple’,‘b’:‘banana’,‘c’:‘cherry’} |
2. 变量和常量的声明
定义变量的方法
- 显示定义
int a = 0;
String cc='';
- 隐式定义
使用var关键字定义的变量,不指定类型,通过系统自动判断,赋值后确定类型,不能再次改变。
var aa = 0;
var dd = ' ';
定义常量的方法
- 使用const关键字定义的编译时常量,它必须是一个字面常量。
- 使用final关键字**定义的是运行时常量,也就是它的值可以是一个变量。
3. 函数定义
- 普通函数
int add(int a,int b){return a+b;
}
- 可选参数
int add(int a, int b, {int c=0}){return a+b+c;
}
- 匿名函数
int function=(int a,int b){return a+b;
}
function(2,1);
- 箭头函数
int add(int a, int b, int c) => a+b+c;
匿名函数和箭头函数组合起来使用,具体用法如下:
int function(int a, int b, int c)=>a+b+c;
4. 条件表达式和运算符
部分操作符 | 说明 |
---|---|
is | 判断某个变量是不是指定的类型,若是返回true |
is! | 与is相反 |
as | 相当于java中instanceOf,用于类型转换 |
condition?expr1:expr2 | 如果condition为true就返回expr1表达式的值,否则返回expr2表达式的值。 |
… | 级联运算符,链式调用。 实例:Student().setGender()…setAge(); |
expr1??expr2 | 如果expr1不为null就返回expr1,否则返回expr2。 |
5.条件和循环表达式
- if…else…
- switch…case…default…
- for循环
- while循环
- do…while…
- List遍历
for(var ddd in list){//遍历list
}
list.forEach((ddd){//遍历list
})
- Map遍历
for(var key in map.keys){print("key:$key, value:${map[key]}"); //输出key和value
}
map.forEach((key,value){print("key:$key,value:$value"); //输出key和value
});
6.定义类
Dart使用class关键字定义类,这一点和java类似。
- 构造函数
class Student{String name;String age;Student(String name, String age){this.name = name;this.age = age;
}
在Dart中定义class有一种简便写法,具体用法如下:
class Student{String name;String age;Student(this.name, this.age);
}
若没有定义构造函数,则会有一个默认的无参构造函数。
- 运算符重载
运算符重载在Dart中指的是类的运算符重载,主要作用是当我们想让两个对象相减,然后得出相关属性的相减,默认情况下是没有对象相减这个功能的,这时就可以用重载“-”运算符完成上述功能,具体用法如下。
class Student{String name;String age;Student(this.name, this.age);operation -(Student student){return Student(student.name, this.age-student.age);}
}
Dart语言允许重载的运算符有:+加,-减,*乘,/除,%求余,^位异或,/除以取整,>大于,<小于,>=大于等于,<=小于等于,>>右移,<<左移,&位或,|位与,[]列表访问,一元按位补码(0 变为 1;1 变为 0)
- extends、with、implements、abstract的用法
(1)Dart类的继承使用extends关键字,只能继承一个类,具体用法如下。
class Student1{}
class Student2 extends Student1{}
子类重写父类的方法需要使用@override关键字,调用父类的方法需要使用super关键字,这样子类可以访问父类所有的变量和方法。
(2) Dart语言中使用with关键字来继承多个类,具体用法如下。
implements
class Student1{String getName(){return "";}
}
class Student2{}
class Student3{}
class Student4 extends Student1 with Student2, Student3{}
class Student5 with Student1, Student2{}
(3)Dart语言中虽然没有interface关键字定义接口,但是Dart中每一个类都是一个隐式的接口,而且还包括类的所有方法、变量。所以,当我们想要实现一个类时,需要在子类中实现该类的方法、变量。具体用法如下。
class Student1{String getName(){return "";}
}
class Student6 implements Student1{@overrideString getName(){return null;}
}
(4)在Dart中abstract关键字是定义抽象类的,子类继承抽象类时需要实现其抽象方法,具体用法如下。
abstract class Student1{String getName();
}
class Student2 extends Student1{@overrideString getName(){return null;}
}
- 定义私有变量
在Dart中没有public、private等修饰符,如果想要定义私有变量,就要在属性名称前面加上“_”。需要注意的是,这种定义私有变量的作用域只是当前的Dart文件,其他Dart文件无法访问,具体用法如下。
class Student1{String name;int _age; //私有变量Student1(this.name, this._age)
}
7.异常捕获
在Dart中使用try…catch和try…on关键字来捕获异常。这二者的区别在于,on捕获指定的异常,但是不能处理异常。catch不能捕获指定的异常,但是可以处理异常。
try{
//
}on Exception catch(e){
//捕获指定异常并处理
print("exception:$e")
}finally{
}