Flutter入门-02-Dart语言简讲

作者: HelloMrLi | 来源:发表于2019-07-09 18:03 被阅读14次

    前言

            React-Native相比 ,Flutter是真正能实现跨平台保持UI一致性的移动跨平台UI框架,它是谷歌Fuchsia新版操作系统使用的UI框架,Flutter预置的很多组件都是可以直接拿来使用,而且在Android和IOS系统上表现完全一致,通过消息渠道MethodChannel,更方便简洁的实现了和原生端通信;想要开始编写Flutter应用,那么我们就先学Dart语言开始吧

    正文

            上节课我们介绍了Flutter从工程搭建到运行的知识,下面我们要对于变成语言做些简单了解,这里只介绍常用的语法,如果想要了解更多,请查看官方介绍

        Flutter采用Dart语言进行开发,而并非Java,Javascript这类热门语言,这是Flutter团队对当前热门的10多种语言慎重评估后的选择。因为Dart囊括了多数编程语言的优点,它更符合Flutter构建界面的方式

    Dart & Flutter

    Dart语言

            1,数据类型

            2,类

            3,函数


    第一节:数据类型

            Dart中共可以分为9种数据类型,分别为num,int,double,bool,list,set,map,runes,symbol;常用的就是前7种,runnes是用于显示Unicode字符的,而symbol是Dart语言内部使用的;同时,Dart的变量声明,也可以不使用具体的上述9种类型来声明,仅使用var或者dynamic来修饰即可

    num(int,double)类型

    num类型其实是int和double类型的基类,也就是父类,可以隐式转换为两种子类型,样例如下:

            num  _age = 0;

            num  _age2 = 1.0;

    _age表示num类型的私有变量,初始化的值未0,此时打印出_age的类型(_age.runtimeType),发现类型是int类型的;而_age2同样以num类型声明,只是初始化的值给了1.0,打印的类型却是double类型的;

           double  _age = 0;

           double  _age2 = 1.0;

    上面的例子,将num换成了double来修饰,那么_age和_age2的数据类型却都是double了,这里不难理解,因为double和int都属于最小修饰单位了,修改的是具体实际类型

           int  _age = 0;

           int  _age2 = 1.0;

    再把double同时换成int来修饰,这里其实1.0这一行的_age2就会报错了,因为int是整形的,所以这里声明初始化不合法;同样改成1后,两种类型都是int类型

    bool类型

    bool类型也是常用类型之一,比如我们需要控制某个流程是否执行,我们会声明一个布尔值来操作,如果为true则执行,否则不执行,这是很常见的使用bool来控制流程的情景,Dart中使用样例如下

            bool a = true;

            bool _b = false;

    a是一个公用的布尔类型,值为true;_b是一个私有的布尔类型,值为false;注意,此处不存在默认值为false的情况,不给默认值,默认值就是null,而null和非null是不可以直接放入判断的,这里和JavaScript要区别来对待

    list类型

    我们和后台进行数据交互时都会存在列表数据,而这些列表数据则是需要存储在list中,const声明后的list不能修改,常用空List声明几种方式如下

    List声明

    set类型

    有时候我们需要列表中的数据是不重复的,但是我们又不想自己去主动维护,这里我们可以使用set来作为list的替代品,常见的空set几种声明方式如下

    Set声明

    map类型

    需要存储键值对的时候,我们就需要使用map类型了,比如一个姓名对应一个学生,那么不使用对象来封装的列表的时候,我们就需要使用键值对map来存储,常见几种空的声明方式如下

    Map声明

    runes类型

    该种类型主要用于在字符串中表示Unicode字符,表示Unicode码位的方法是\uxxxx,其中XXXX是4位十六进制值。例如,心脏字符(♥)是\u2665。要指定多于或少于4个十六进制数字,请将该值放在大括号中。例如,笑符号(😆) is \u{1f600}

    Runes使用

    动态类型var,dynamic

    var是JavaScript语言中使用的变量声明关键字,dart中也可以使用var来声明变量类型并执行自动推断,如下_age就是int类型的,而_age2就是double类型的,很像num类型的自动转换;

    注意,使用了var就不能使用上述具体类型来修饰了,即var int a = 0;是错误的

    var声明变量

    dynamic是C#语言中的特性,Java里是不存在这种弱类型声明的,而dart中也有此种类型,这种类型其实和var有内在联系,如果我们使用var声明一个变量,并未赋值,那么打印出类型就是dynamic类型的,当然dynamic也可以直接修饰变量,如下两个变量都是string类型的

    dynamic声明变量

    final,const,static修饰类型

    上述我们介绍了如何修饰变量名,这里我们介绍如何修饰变量类型,我们使用final和const来修饰不可变变量/对象,使用static来修饰类成员;final和const都是在声明的时候就要初始化,两者的区别在于编译时常量和运行时常量,如下图

    final和const

    而static则可以用在任意地方,但是有一种情境下必须使用static来修饰;在类种使用const修饰变量的时候,必须使用static关键字来修饰变量类型

    static&const

    第二节:类

            类是dart中常用的对象之一,用class表示类的修饰关键字,这里和Java里的关键字是一样的,我们使用class来封装对象,把不同类型的数据绑在一起进行处理传递等;

            类分为普通类和抽象类,dart中没有接口的概念,所有的类都是隐式的接口,也就是可以使用implements来实现类,抽象类使用abstract修饰,Java内的抽象类内的方法必须要有方法体的,这里抽象类内可以不写方法体,只声明方法;当然,这里的class也可以被extends的,也不能使用多个extends,但是可以使用多个implements,从这个来说,也就是变相实现了多继承

    继承有参构造方法

    上述OneChild继承了One,但是发现OneChild报错,这里如果使用继承关键字extends关键字,需要重定向父类的非空构造方法,如果是父类里没有有参构造方法或使用可选参数构造方法,则此处就不会报错;此处修改后如下:

    构造方法父类重定向

    类也可以继承extends抽象类,但是继承抽象类要注意必须要重写父抽象类的中方法声明,父抽象类已经有方法体的可以有选择的重写与否,如下中的getT方法必须要重写,而getT2则可以不写

    继承抽象类

    同时类也可以实现implements抽象类,但是要重写抽象类中的所有非构造方法以外的部分,具体样例如下:

    实现抽象类会根据

    构造方法的执行顺序是:初始化列表->父类的无参构造函数->当前类的无参构造函数,这里后面两个我们都清除,但是对于初始化列表构造函数,我们需要特别说明下,这个构造方法是最早运行的,我们可以做些赋值或者规则判断,也可以加上方法体,样例如下:

    初始化列表

    上例中,我们看到在调用默认构造函数时,我们直接对a进行初始化,assert用于断言中断,意思是如果判断为false,则不执行后面的逻辑,并抛出错误,此处错误并不会导致界面上的crash,只是内部中断处理

    第三节:函数

    dart中的函数声明基本和Java差不多,但是可以不用声明返回类型,也可以声明了类型,不加return,比较灵活

    无参函数

    上述是无参函数的声明,有参函数又可以分为3种:参数,位置参数,可选命名参数,前两种必须要写,但是最后一种可以不写,类似Java中的可变参数;位置参数和可选参数不能同时使用,且位置放在普通参数后面,部分样例如下:

    有参函数

    其他:

            Dart种不使用private,public,protected等修饰词来限制访问范围,使用下划线_来作为开头表示私有变量或者对象,不加下划线的表示公共的,类似于public修饰的

            Dart中声明过但是未初始化的所有变量的值皆为null,即使变量声明使用num,int等声明

            Dart中使用双英文点来直接调用对象内部方法,实现链式调用

            Dart中表达式需要用分号结尾,这点和Kotlin有所不同

    上一篇:Flutter入门-01-工程创建&目录介绍

    相关文章

      网友评论

        本文标题:Flutter入门-02-Dart语言简讲

        本文链接:https://www.haomeiwen.com/subject/igexkctx.html