Flutter学习之Dart基础

前言

随着互联网的发展,企业对程序员的技术要求越来越高了,所以程序员还是要多学习最新的知识,才不会被淘汰,特别是移动端的小伙伴,只会一种编程语言显然是不现实的,接受一门新的语言也不是非常困难,只要有面向对象编程的基础,万变不离其中,万法归一。接下来我们就一起去探究混合开发之Flutter,之前一直从事iOS开发,开发过程中使用oc和swift,再后来学习Java,从事Android开发。最近两年混合开发还是比较流行的,去年学习过一点React Native(RN),之后也会把对应的学习笔记整理一下。好了,接下来我们一起学习Flutter基础知识。

Dart简介

  • Dart也是一种编程语言,想学习Flutter混合开发做APP,必须掌握Dart的语法,例如你想开发iOS应用,必须掌握OC语法或者swift语法,当然精通一门编程语言,学习其他的语言可以使用类比的方式去学习,这样理解掌握的速度最快捷。

配置对应的开发环境

为什么还需要安装Dart呢?
事实上在安装Flutter SDK的时候,它已经内置了Dart了,我们完全可以直接使用Flutter去进行Dart的编写并且运行。 但是,如果你想单独学习Dart,并且运行自己的Dart代码,最好去安装一个Dart SDK。

  • 下载SDK。无论是什么操作系统(macOS或者是windows),安装方式都是有两种:通过工具安装(终端命令)和直接去官网下载SDK然后配置环境变量。官方网站:Dart官网,具体怎么配置请按照官网步骤操作。
  • 编辑器的选择。学习Dart过程中,我使用VSCode作为编辑器。VSCode编辑器特别好用,插件化的轻量级编辑器,编程体验不错,值得推荐,支持前端好多种语言开发,我们暂时只要配置几个插件就可以编程了,Dart和Flutter插件是为Flutter开发准备的,这两个是必须的,其他的好用插件也有很多,有兴趣的小伙伴可以去了解一下。好了接下来,我们赶紧去敲代码了,有点迫不及待了。

Dart基础语法

1main(List<String>args) 2{ 3 print('hello world'); 4} 5 6
  • Dart语言的入口也是main函数,并且必须显示的进行定义;
  • Dart的入口函数main是没有返回值的;
  • 传递给main的命令行参数,是通过List完成的。

从字面值就可以理解List是Dart中的集合类型。其中的每一个String都表示传递给main的一个参数;

  • 定义字符串的时候,可以使用单引号或双引号;
  • 每行语句必须使用分号结尾,很多语言并不需要分号,比如Swift

定义变量

明确声明变量,格式如下:

变量类型 变量名称 = 赋值 ;

示例代码:

String name = ‘nalan’;

int age = 18 ;

print(’${name}’)

类型推导

格式如下:

var/dynamic/const/final 变量名称 = 赋值;

  • var 类似于swift中的,定义变量的关键字,定义的变量以第一个初始化值的类型为准,假如是字符串就只能是字符串,之后修改变量的值也只能是字符串类型。dynamic是动态的,申明变量更加灵活,但是类型变量存在潜在的危险,用dynamic定义的变量,可以赋值不同类型的值,输出以最后一次赋值的类型为准。

final和const都是用于定义常量的, 也就是定义之后值都不可以修改。const在赋值时, 赋值的内容必须是在编译期间就确定下来的,final在赋值时, 可以动态获取, 比如赋值一个函数 。

1 main(List<String>args){ 2 const age = 18; 3 age = 20;//这里就报错了,不能修改age的值 4 final name = getName();//可以动态获取,语法没毛病 5 const name = getName();//语法错误,const修饰不能动态获取 6 } 7 String getName(){ 8 return 'bobo' 9 } 10 11 12

数据类型

数字类型

对于数字来说,我们不用关心她是否有符合,以及数据的精度问题,只记住2个就行了,整数就用int,浮点数就用double就行了。字符串和数字之间可以相互转换,和其他语言的转换方法类似,这里就不一一举例了。

布尔类型

布尔类型中,Dart提供了一个bool的类型, 取值为true和false,注意Dart中不能判断非零即真,或者非空即真,这点和java对比还是有区别的,Dart只认true和false,其他的一概不认,直接报错。

字符串类型

Dart字符串是UTF-16编码单元的序列。您可以使用单引号或双引号创建一个字符串:

1//定义字符串 2var s1 = 'bobo'; 3var s2 = "纳兰"; 4//可以使用三个单引号或者双引号表示多行字符串: 5var mess = ''' 6人生 7若只 8如初见 9何时秋风 10悲画扇 11''' 12//字符串和其他变量或表达式拼接: 使用${expression}, 如果表达式是一个标识符, 那么{}可以省略 13print('my name is ${s1}') 14 15 16

集合类型

对于集合类型,Dart则内置了最常用的三种:List/Set/Map。
定义如下:

1//List定义 2//类型推导定义 3var movies = ['天道','越狱','功夫']; 4print(movies.length); 5movies.add('无极'); 6moveis.remove(1); 7moveis.contains('无极'); 8print('$movies , ${movies.runtimeType}'); 9//明确指定类型 10List<int> nums = [2,5,8]; 11//Set 和List定义类似 12 13//Map的定义和使用。Map类似于OC中的字典,key-value组合。 14 Map<String,Object> infoMap = {'name':'nalan','age':18}; 15 print('$infoMap ${infoMap.runtimeType}') 16 17 18

函数的基本定义和使用

Dart是一种真正的面向对象语言,所以即使函数也是对象,所有也有类型, 类型就是Function。这也就意味着函数可以作为变量定义或者作为其他函数的参数或者返回值.

1返回值 函数的名称(参数列表){ 2 函数体 3 return 返回值 4} 5int sum (int a,int b){ 6return a+b; 7} 8注意:如果函数体只有一句表达式,可以使用箭头语法,这里的箭头语法和JS中的箭头函数区别很大 9sum(a,b) => a + b;//这里的类型可以省略不写,系统会自动帮我推导 10 11

函数的参数问题:函数的参数可以分为两类,必传参数和可选参数,可选参数又分为命名可选参数和位置可选参数定义方式如下:

1命名可选参数:{param1,param2,....} 2位置可选参数:[param1,param2,....] 3 4//命名可选参数 5printInfo(String name,{int age,double height}{ 6print('$name , $age , $height'); 7} 8printInfo('nalan');//可选的都可以不传 9printInfo(‘纳兰’,age:18,height:1.78);//可选的参数都传值 10printInfo('nalan',height:1.78)//age可选,可不传 11 12//位置可选参数 13printInfo1(String name, [int age,double height]){ 14print('$name , $age , $height'); 15} 16printInfo1('nalan');//可选的都可以不传 17printInfo1(‘纳兰’,18,1.78); 18 19//参数默认值,可选参数我们可以设置默认值 20printInfo(String name,{int age = 18,double height = 1.88}{ 21print('$name , $age , $height'); 22} 23 24 25

函数的其他用法

函数可以作为参数使用也可以作为返回值。

1main(List<String>agrs){ 2//将一个函数复制给一个变量 3var bo = funct; 4 5//将函数作为另一个函数的参数 6test(funct); 7// 将函数作为另一个函数的返回值 8var bobo =getFunc(); 9 bobo('nalan'); 10 11} 12//1.定一个普通函数 13funct(String name){ 14 print('传入$name'); 15} 16//将函数作为另一个函数的参数 17test(Function func){ 18 func('nalanrongruo'); 19} 20//将函数作为另一个函数的返回值 21getFunc(){ 22return funct; 23} 24 25//匿名函数,没有名字的函数就是匿名函数 (){} 26var movies = ['天道','越狱','功夫']; 27movies.forEach((item){ 28print (item) 29}); 30 31

小结

今天暂时学习这些,我们大致对Dart语法有个初步的了解,如有错误请指出,一起学习。接下来学习Dart的运算符、流程控制、类和对象、库的使用。

代码交流 2021