自己提升 + 公司需要

70 阅读3分钟

起因

公司需要进行APP开发,前端选型选Flutter

成本

学习Flutter,需要在之前学习新语言Dart

学习

一.Dart

主要是几点(与JS,TS区别)

1.定义变量

// 基本数据类型
var variable1 = 'variable1'
String variable2 = 'variable2'
int variable3 = 3
double variable4 = 3    // 3.0
bool variable5 = true

//复杂数据类型 List集合
var variableList1 = ['1','2','3']
var variableList2 = <String>['1','2','3']  //泛型
var variableList3 = []  //可变容量
var variableList4 = List.filled(length, '')  //不可变容量
var variableList5 = List<String>.filled(length, '')  //不可变容量泛型

//复杂数据类型 Maps类型
var variableMap1 = {}
var variableMap2 = new Map()

//判断类型使用 is关键字

2.定义常量

final  赋值成 new DateTime().now()  可变一次
const  赋值不可变

3.运算符 条件表达式 循环和 JS一样

4.List的常用属性和方法

3c22cf8aedf70bf53b1331a013e2fc8.png

5.Set的常用属性和方法 主要是去重操作 类数组

6.Map映射 类对象

image.png

7.复杂类型的公共方法 forEach map where any every

forEach 
List和JS的forEach一样
Set类数组 类集合一样
Map类对象 forEach(key,value)

map
List和JS的map一样
Set类数组 类集合一样
Map类对象 map(key,value)

where
List和JS的filter一样
Set类数组 类集合一样

any
List和JS的some一样
Set类数组 类集合一样

every
List和JS的every一样
Set类数组 类集合一样

8.函数定义,作用域,可选参数+默认参数(String name, [int age = 18]) 都和TS一样

image.png

9.箭头函数 匿名方法 闭包

1.箭头函数 和JS一样
2.匿名方法 相当于 函数赋值
3.自执行方法 (function(){})()
4.递归  自己执行自己  --- 注意:避免死循环
5.闭包 和JS一样  方法里面 嵌套一个方法 并且 返回一个方法

fn(){
    var a = 123
    return (){
        a++
        print(a)
    }
}

var b = fn()
b()  // 124
b()  // 125
b()  // 126

10.类 对象

class Person(){
    String name = 'cgl'
    int age = 23
    // 构造函数
    Person(){
        //实例化自动触发  相当于JS的 constructor
    }
    // 默认构造函数
    Person(this.name, this.age)
    // 命名构造函数
    Person.eat(){
        print('eat food')
    }
    void getAuthorInfo(){
        print('$name')             //不推荐
        print('${this.name}')      //推荐
    }
    // 类中的getter settter
    get A{
        // 访问
        return xxxx
    }
    set A(value){
        // 修改
        this.name = value
    }
}

dart没有私公有的关键字
私有: 加上下划线 抽离到其他文件

11.静态成员 操作符 继承

静态成员 直接通过类来访问 不是实例访问 和JS一样 使用static关键字
访问静态属性, 调用静态方法 不需要 this
访问非静态属性 需要 this

非静态可以访问静态
静态不可以访问非静态

.. 连缀 相当于链式调用
     
p1..name = '李四'
    ..age = 18
    ..PrintInfo()
    
    
继承
class web extends Person{  }

web 继承 person
身上拥有可见属性 可见方法

如果 person身上有构造函数
web也需要构造函数 需要super

class Web extends Person {
    String sex;
    // super 继承父类的构造函数
    // : 初始化列表
    Web(String name , num age, String sex) : super(name, age){
        this.sex = sex
    }
    //可扩展  可重写
}

12.抽象类 abstract 约束像接口一样

image.png

13.dart中的mixins 类似于多继承

image.png

// 要实现所有方法
A,B,D都是抽象类
class C implements A,B,D {

}

A,B都是类  同样属性和类  后会覆盖前面  超类的子类型
class C with A,B{

}

14.泛型 泛型接口 和 JS基本一样 接口使用抽象类去写

15.dart库

image.png

16.dart 2.13 的新特性

非空类型的校验(空安全)  null
String? username = 'xxx'  // String? 可空类型
username = null

String? str = 'xxxx'
str = null
print( str!.length )  // 类型断言 str为空会抛异常