Flutter(Dart)

在这里插入图片描述

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 刚好相反
          });
      • forEach

        • names.forEach((k, v ){
          print(‘ k , k, 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(‘方法体不是必须的’);
            }
        • 如果父类没有默认构造的方法(无参的构造方法),则需要在初始化列表中调用父类的构造方法进行初始化

        • 方法体可省略

      • 命名构造方法

        • 结构[类名+.+方法名]
        • 先使用父类的构造方法进行初始化
        • 是一种特殊的构造方法(针对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

猜你喜欢

转载自blog.csdn.net/u010436133/article/details/108963815