Flutter(Dart)
概述
强类型语言、静态类型
- 指定变量的类型
- 编译器编译时期就进行了检查(类型安全)
面向对象
- OC、JAVA、Dart
JIT&AOT
- 即时编译,开发期间。更快编译更快重载
- 事前编译,release期间,更快更流畅
基础
数据类型
-
数字
- num
- int
- double
-
字符串 String
-
subString(1,5)
- 字符串截取
-
indexOf(“XX”)
- xx:获取指定字符串位置
-
startWith
- 判断开始位置的字符串
-
replaceAll
- 替换指定地字符串
-
etc:查看文档,当需要的时候
-
-
布尔 bool
-
强类型检查
- 只有bool的类型的值是true 才被认为是true
-
-
集合 List
-
List list = [1,2,‘集合’]
-
List listInt = [‘String’] 使用泛型,强类型检查后,编译期间直接抛错
-
listInt = list; //build 期间之间抛错 (错误做法,类型转换错误)
-
remove
-
insert
-
sublist
-
indexOf
-
通过迭代器的形式:
-
遍历
-
for
-
for in
- for(val obj in list){}
-
forEach
- list.forEach( (val){//语句xxx} )
-
-
-
Map
-
Map 是将Key和value 相关联的对象,key 和value 都可以是任何类型的对象,并且key是唯一的如果后来有从重复的则会把前边的key进行覆盖
-
初始化
- Map names = {“name1”:“bean”}
- Map ages = {}; ages[“key1”] = value1
-
遍历
-
for (var key in ages.keys){
print(’$key ${ages[key]}’);
} -
调用map 方法生生成新的map
- Map ages2 = ages.map((k,v){
//迭代生成一个新Map
return MapEntry(v, k);//和之前的MAP的K,V 刚好相反
});
- Map ages2 = ages.map((k,v){
-
forEach
- names.forEach((k, v ){
print(‘ k , k, k,v’);
});
- names.forEach((k, v ){
-
-
-
混淆点
-
Object
-
Dart基类
- 只能调用Object 存在的方法
- 类型可以被反复修改
- 和dynamic唯一的区别是在静态类型检查上
-
-
dynamic
-
对象的基础类型,数据类型可以反复被修改
- 通常不使用,原因是静态类型检查不会抛错,运行时会crash,
-
-
var
- 一旦定义,不允许被修改。(系统会动态推断数据类型)
-
面向对象
封装、继承、多态(重载)
类(重要)默认继承:Object
-
对象
-
变量
- 私有变量定义 _privateVar
-
方法
-
构造方法 (是方法的一种)
-
标准构造方法
- Person(this.xx , this.xx)
-
初始化列表
-
除了调用父类构造器,在子类构造方法体之前,可以初始化实例变量,不同的初始化变量之间用逗号分割
- Student(this._school, String name, int age, {this.city,this.country = “china”}) : name = ‘$country and $city’, super(name, age){
print(‘方法体不是必须的’);
}
- Student(this._school, String name, int age, {this.city,this.country = “china”}) : name = ‘$country and $city’, super(name, age){
-
如果父类没有默认构造的方法(无参的构造方法),则需要在初始化列表中调用父类的构造方法进行初始化
-
方法体可省略
-
-
命名构造方法
- 结构[类名+.+方法名]
- 先使用父类的构造方法进行初始化
- 是一种特殊的构造方法(针对flutter而言)
- 方法体可以省略
-
工厂构造方法
- factory 标识
- 唯一实例
- 更像是其他语言里边的单例:大多约定使用static
- 更像是一种模式
- 使用工厂模式来定义构造方法就称为工厂构造方法
-
命名工厂构造方法
- 网络请求,数据解析时候会经常用到
- factory [类名+.+方法名]
- 可以又返回值,不需要讲类的final变量作为参数,是提供一种灵活获取类对象的方式。
-
可选参数/默认参数
- 默认参数一定是可选参数
- 初始化的时候需要使用 {} 包括起来
- 非构造方法独有,其他的方法也可以使用
-
-
实例方法
- 除了构造方法外都是实例方法
-
setters 和 getters
-
让外界对内部属性进行设值/获取值
- String get => _school
- set school(String vlue){_school = value}
-
-
静态方法
- static myPrintFun(){ print(‘msg is print’) }
- 类名+方法 进行调用
-
抽象
-
抽象类
- abstract 关键字修饰
- 抽象类不能被实例化
- 定义接口的时候比较常用。类似与虚基类
- 类可以没有抽象方法,如果有抽象方法则是抽象类
-
抽象方法
- 在抽象类里边存在的方法,称为抽象方法
mixins
-
必须继承Ojbect
-
不能有构造方法
-
不能调用super
-
特性是可以快速复用代码
-
使用mixins
- 需要在with关键字后边跟上一个或多个mixins的名字《逗号分割》
- with要用在extends后边
泛型
可以提高类型检测
提高了类、接口、方法的复用性
对不特定数据类型的支持
泛型类、构造方法中也可以使用泛型、泛型方法
异步
async await
Future
Stream
技巧
善于使用封装达到尽可能少的代码做更多的事情(复用)
继承(快速的使用其它类已经实现的代码)
多态(主要是方法的重用、重载)
点点点技巧
- 例如:写了一个类,然后使用.的方式查看这个类有什么属性和方法
- 通过点击方法进去看看方法具体的实现已经之间的关系
- 如果之间存在着继承或者深层嵌套,则积蓄点进去,进行查看类之间的关系
关于异常的判断
-
可以使用?.的形式 避免访问时候crash
- 例如List list = List();
- list.length则会crash
- list?.length则不会
-
可以使用?? 提供一个默认值
-
也可以使用数组的形式判断多个条件的匹配
- 例如:["",null,]
学习资料
http://dart.goodev.org/guides/language/effective-dart
https://dart.dev/guides/language/language-tour
https://dart.dev
函数/方法
方法构成
-
返回值
-
参数
- 普通参数
- 可选参数
- 参数默认值
方法类型
-
入口方法
- main 方法
-
构造方法
- 初始化类变量的方法
-
实例方法
-
setters/getters
-
静态方法
-
抽象方法
-
私有方法
-
匿名方法
-
泛型方法
心得
Dart的类名字为大写,但文件名字一般都为小写(区别于其他的文件 )
下划线可以标示私有方法、类、变量
不像是OC,没有*号的概念,在创建对象的时候
Floating Topic
XMind - Trial Version