flutter从入门到精通一
Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、Web、桌面和嵌入式平台
flutter是基于dart语言开发的,我们将首先通过几章节介绍下dart语言,再详细的学习flutter
1.dart里面是有类型的,并且具有类型校验校验 ,如果不申明具体类名,而是用var,dart就会自动推断变量类型
2.dart变量名称是区分大小的,name和Name是两个不同的变量
3.dart数据类型(可以通过is关键字判断类型):
- 整形 int 浮点型:double double可以被赋值整形或者浮点型,但是int必须是整型。
- 字符串 String
- 布尔 bool
- Lsit (数组)
- Map (字典),类似于js中的对象
//用var来定义变量,能定义任何变量,但是会自动推断变量类型,一旦赋值给某个具体的变量类型后,变量类型不会发生变化了
// void表示没有返回值,所有的dart代码需要放在main方法里面
//下面定义了一个数组,数组的增加是通过add()
void main(){
var arr=new List();
arr.add('张四');
arr.add('张五');
arr.add('张六');
print(arr);
}
不同类型的变量,可以通过一些方法进行转换类型,如下:
/**
* 1,number和String类型之间的转换
* number=>String toString()
* String=>number parse()
* 2,isEmpty:可以判断字符串是否为空
*/
String str='123';
int myNum=int.parse(str);
// var myNum=double.parse(str);
//dart中,打印信息用print,这个是全局方法,类似于js中的console.log()
print(myNum is int);
**tips:如果预知代码可能会出现bug,可以将代码包在try-catch里面,如下:
String price='';
try{
var myNum=double.parse(price);
print(myNum);
}catch(err){
print(0);
}
dart中主要有三种集合类型:
List(类似js中的数组):
- List属性:
- isEmpty:是否为空
- isNotEmpty:是否不为空
- reversed:数组翻转
- List方法:
- add:增加元素,增加一个
- addAll:增加元素,增加多个,传入的是一个数组(主要的功能是拼接数组)
- indexOf:查找某个元素的索引
- remove:删除某个元素
- removeAt:删除某个索引的元素
- fillRange:修改
- insert(index,value):指定位置插入数据
- insertAll:插入多个数据
Set(去重,方法和List差不多,将Set转化成List,通过toList())
var list=['苹果','香蕉','桃子','苹果','香蕉','桃子','苹果','香蕉','桃子'];
var set=new Set();
set.addAll(list);
var list1=set.toList();
Maps:其类似于json,但是键名需要用引号引起来
var person={
"name":"jack"
}
- 常用属性:
- keys:所有的键
- values:所有的键值
- isEmpty:
- isNotEmpty:
- 常用方法:
- addAll:一次增加多个键值对
- remove:
对于三个集合(List,Set,Map)有些公共的循环遍历方法:
- for-in
- forEach():类似于es6中的forEach
- map:类似于es6中的map
- where:类似于es6中的filter
- any:类似于es6中的some
- every:类似于es6中的every
函数:包括系统函数+自定义函数
- 系统内置的函数:比如print
- 一个方法中是可以嵌套其他方法的,而且可以嵌套很多层,这时候需要注意方法的作用域,(方法里面套方法,返回内部的方法,这就是闭包)
- 给方法命名建议使用驼峰,首字母是小写,给类命名也是驼峰,但是首字母需要大写
- 注意dart中的方法是没有关键字function,这个要注意
*dart中的可选参数,需要将参数放在:[ ] - 箭头函数只能写一句话,和es6中的箭头函数有点区别,
- 方法的形参尽量加上类型
- 全局变量:会常驻内存,容易污染全局
- 局部变量:不会常驻内存,会被垃圾机制回收,不会污染全局
- 如果想让一个变量常驻内存,而且不污染全局,只能用闭包实现,闭包也是这个目的
类
class Person{
String name;
int age;
// 构造函数,名字和类名一样
Person(name,age){
this.age=age;
this.name=name;
}
//上面有个简写的方法:
//Person(this.name,this.age)
getInfo(){
return '$name--$age';
}
}
main(){
/**
* 类(三大特性:封装,继承,多态),
* 类需要放到main函数外面
*/
Person p=new Person('唐凯震',25);
print(p.getInfo());
}