Flutter基础语法归纳

842 阅读7分钟

1、var、final、const

1.1、var

  • 变量,不赋值为null,编译期类型

1.2、dynamic

  • 动态类型,运行时类型

1.2、final

  • 最终变量,只能被赋值一次,赋值后不可改变, 编译时常量

1.3、const

  • 常量,初始时赋值,不可改变, 运行时常量

2、num

  • ~/:计算时的取整操作
    • .clamp(lower limit, upper limit):取整的上下限
  • .toString():转成字符串
  • isNan: 判断一个对象是否为非数字
  • ceil: 返回不小于该数字的最小整数
  • floor: 返回不大于当前数字的最大整数

2.1、int

  • int类型不能直接赋值成double
  • .isOdd:判断是否为奇数
  • .isEven:判断是否为偶数
  • .toDouble():转换成double类型

2.2、double

  • double类型可以直接赋值int类型
  • .toInt():转换成Int类型

3、String

  • var str = '字符串',再str = 10会出错:带赋值的初始化会固定其类型,要写成var str; str = '字符串'
  • str[n]:取字符串str的第n个字符
  • + :拼接字符串,str1 + str2
  • * :n个相同的字符串拼接,str * n
  • $ :取值,str3 = str1 + str2,$str3${str1 + str2},{}中放表达式
  • r :字符串中不需要转译字符,让\n等这些能出现在字符串中,r'猫\n狗’
  • .length :取字符串长度(转译字符串占1个长度,'\n':1个长度,r'\n':2个长度

3、1、双引号""

  • 创建多行字符串,直接写,直接拼到一起显示 image.png

3、2、三引号''' '''

  • 创建多行字符串,并保留所有空格、换行等格式 image.png

4、list & Map

4.1、list(数组)

  • .asMap():角标做key,转成键值对

  • .forEach((element) { }:遍历内容

  • .indexOf(element,[start]):查找一个元素,返回这个元素在数组中的索引,如果数组中没有这个元素,则返回-1.该方法接收两个参数,第一个就是查找的元素,第二个是非必须参数,表示查找的起始位置

  • .sort((Model a, Model b) {}:按模型中的某个属性进行排序

    list.sort((Model a, Model b) {
        return a.property compareTo(b.perperty);
    });
    
  • .toList():将一个可迭代类型转换为数组

  • .join(separator):将数组转换为字符串,参数为分隔符 image.png

  • reversed:反转数组,但是返回值不是一个数组,而是一个抽象类的实例化对象,所以需要通过 toList() 转换为数组 image.png

  • map(function):加工方法,该方法不会改变原数组,而是返回一个新的可迭代对象,Iterable,参数是一个回调函数。 image.png

  • any(function):遍历数组,每个元素都执行一次回调函数,判断是否满足回调函数返回值条件,如果有一个或以上元素满足,则返回 trueimage.png

4.1.1、 可变list
  • var list1 = [1,2,'字符串'];
  • .add(value): 添加,list.add('cat');
  • .remove(value): 删除元素,list.remove('字符串');
  • .removeAt(index): 删除指定位置元素,list.removeAt(index);
  • .insert(index, element): 插入,list.insert(1,'dog');
  • .clear(): 清空
  • .sort():排序
  • .sublist(int start ,[int? end]):截取字符串,start:从第几位开始截取, end:截取多少位,可选的,不填为截到最后
  • : 扩展运算符: 将一个数组填充到另一个数组中
  • …?: 空值判断扩展运算符
    List list1 = [1, 2, 3]; 
    ///将list1填充到list2, 并判空
    List list2 = [-1, 0, …?list1]; 
    
4.1.2、不可变list
  • var list2 = const [1,2,'字符串'];

4.2、Map(键值对、字典)

  • .length:长度
  • .keys:所有key
  • .values:所有值
  • .forEach((key, value) { }):遍历所有内容
  • .isEmpty:判断集合是否为空
  • .addAll():添加所有迭代对象中的键值对
  • .remove(key):删除一个键值对
4.2.1、可变Map
  • var json = {1 : 10, 2.5 : 'dog', '3' : 'cat'};
4.2.2、不可变Map
  • var json = const {1 : 10, 2.5 : 'dog', '3' : 'cat'};

4.3、Set

  • 集合: 无序不允许存在重复的元素最多允许一个空值
  • lookup: 查找Set中的某个元素

4.4、Iterable

  • Iterable是一个可被有序访问的元素集合。Dart中Iterable是抽象类,是不能被实例化的。但可以通过ListSet创建Iterable
  • IterableList的不同之处在于,Iterable没有[]操作符,因此不能使用如下方式读取特定索引的元素: image.png 但是我们可以用另一种方式来获取: image.png
  • 实现了Iterable的类,都是可以使用for-in循环进行遍历的。for-in通过Iterator(迭代器),遍历Iterable对象。
4.4.1、firstlast
  • 使用Iterablelast属性会比较慢,因为它需要遍历所有的元素。当对一个空的Iterable对象使用firstlast会报StateError
4.4.2、firstWhere
  • Iterable的对象中,获取满足条件的第一个元素 image.png
4.4.3、singleWhere
  • Iterable的对象中,获取满足条件的一个元素,但它期望只有一个元素满足条件。如果超过一个或没有元素满足条件,则会抛StateError。用法与firstWhere一致。
4.4.4、条件检查
4.4.4.1、every
  • 使用Iterable,有时需要校验集合中的元素是否满足一些条件,可以不使用for-in image.png
4.4.4.2、any
  • 判断是否至少有一个元素满足某个条件 image.png
4.4.5、where
  • 返回满足条件的所有元素集合 image.png
4.4.6、takeWhileskipWhile
  • takeWhile会从Iterable对象中获取所有满足条件的元素,直到不满足时,会跳出迭代 image.png
  • skipWhile会从Iterable对象中跳过所有满足条件的元素,直到不满足时,会获取。
4.4.7、map
  • Iterable对象可以使用map方法,对集合中的每个元素进行操作或替换,最终返回一个新的集合 image.png

5、运算符

  • ??=:赋值运算,如果a为空,则赋值10,a ??= 10;
  • ??:条件表达式,如果a有值返回a,如果没值返回b,c = a ?? b

6、方法、箭头函数

  • 方法也是一个对象
  • 返回值和参数类型可以省略
  • 当方法的执行语句只有一句时可以使用箭头函数=> 表达式
  • 可选参数:传递参数的时候必须带上形参名字
    • {}表示可选的,参数不用按顺序[]表示可选的,参数要按顺序填 image.png

7、方法、函数

7.1、Dart方法作为参数传递

image.png

7.2、匿名方法

  • 没有方法名称的方法
//匿名方法
(参数,可为空) {
    执行代码;
}
//比如
(int i) {
    print('i');
};

//常规用func接收一下
var func = (参数) {
    执行代码;
}
func();

7.3、立即执行代码

((参数) {
   执行代码;
};

8、闭包(closure)

  • 定义在函数里边的函数,闭包也是一个对象
  • 可以访问外部函数的局部变量
  • 闭包函数被释放前内部使用的变量不会被释放会被闭包函数持续持有 image.png

9、Dart面对对象

9.1、整理:

  • Dart中默认生成getter/setter方法
  • 属性通过点语法访问
  • final修饰的属性必须定义初始值
  • 当一个对象所有的属性都是final修饰时,那么这个对象可以创建为常量对象,使用const修饰 image.png
  • 方法想返回内容,在方法前加关键字 factory

9.2、创建单例

image.png

9.3、初始化列表(:)

  • 给final变量赋值
  • 校验传递的值 image.png

9.4、类方法(静态方法)

  • 调用时使用类名.属性调用,不要初始化
  • static属性,全局唯一
  • 静态方法中只能使用静态属性不能用实例属性实例方法中却可以使用静态属性加载静态方法时,实例属性可能并未创建image.png
  • (变量 as 类名):强制类型转换
  • 链式编程 image.png

9.4、Dart的继承

  • 使用extends继承一个类

  • 子类会隐性继承除构造方法外的属性和方法,如果要调用父类的构造方法则要用: super显性书写 image.png

    image.png

  • Dart是单继承

9.5、抽象类

  • 不能被实例化的类,用abstract修饰
  • 抽象类中抽象方法不用写实现,继承抽象类的子类实现其中的抽象方法 image.png
9.5.1、协议接口
  • implement:多类实现,可以有抽象类也可有普通类,但抽象类必须有实现方法 image.png

10、Mixins混入(多继承)

  • 混入类不能实现构造方法
  • 混入后可以调用这多个类的方法
  • 目的:给一个类增加功能 image.png

11、重载操作符

  • 自定义类对象的比较规则(可按类中某一属性作为对象比较的标准)
  • 类中比较的内容要继承于Object image.png

12、关键字

12.1、@required

  • 必须实现的内容

12.2、@protected

  • 调用保护

12.3、as

  • 自定义别名,如导入多个包包含同名属性、方法时,可以通过将导入的文件自定义别名,再调用的方式实现防止冲突