Flutter入门-02-Dart语言简讲

前言

        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入门-03-封装简单复用组件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容

  • 转自—《Flutter:从入门到实践》http://gitbook.cn/m/mazi/comp/column?c...
    进击的波拿拿阅读 1,363评论 0 11
  • Dart语言 上一篇文章写了flutter的编写demo,这次来介绍一下dart语言。 概述: 1、Dart是Go...
    行动派巨人阅读 1,822评论 0 7
  • Flutter日渐火爆,因此在进行Flutter学习前先学习一些其所使用的开发语言dart的基础,这篇文章主要学习...
    Samlss阅读 10,918评论 2 28
  • 我希望你以后不要再问,这有什么用?那有什么用?问之前自己去实践一番,到底于你有用没用你才能知晓,只有愿意不停尝试的...
    帆朵倪阅读 112评论 0 0
  • 晚上 黑暗之中 天空上 露出了一片光明 从小变大 一朵朵花 随着砰的一声 绽放 刹那间 烟花们犹如一朵朵小太阳 把...
    刘展宏阅读 436评论 0 3