在前面我们已经介绍过Flutter的开发语言是Dart,所以本节我们主要讲下Dart的基本语法,如果需要深究Dart,还需要查阅其他相关资料进行学习。

  Dart语言入门成本还是比较低,如果有编程经验的同学能很快入门。废话不多说,下面我们就从基本的开始进行学习。

一、语言特性

  • Dart所有的东西都是对象, 即使是数字numbers、函数function、null也都是对象,所有的对象都继承自Object类。
  • Dart动态类型语言, 尽量给变量定义一个类型,会更安全,没有显示定义类型的变量在 debug 模式下会类型会是 dynamic(动态的)。
  • Dart 在 running 之前解析你的所有代码,指定数据类型和编译时的常量,可以提高运行速度。
  • Dart中的类和接口是统一的,类即接口,你可以继承一个类,也可以实现一个类(接口),自然也包含了良好的面向对象和并发编程的支持。
  • Dart 提供了顶级函数(如:main())。
  • Dart 没有 public、private、protected 这些关键字,变量名以”_”开头意味着对它的 lib 是私有的。
  • 没有初始化的变量都会被赋予默认值 null。
  • final的值只能被设定一次。const 是一个编译时的常量,可以通过 const 来创建常量值,var c=const[];,这里 c 还是一个变量,只是被赋值了一个常量值,它还是可以赋其它值。实例变量可以是 final,但不能是 const。
  • 编程语言并不是孤立存在的,Dart也是这样,他由语言规范、虚拟机、类库和工具等组成:
    • SDK:SDK 包含 Dart VM、dart2js、Pub、库和工具。
    • Dartium:内嵌 Dart VM 的 Chromium ,可以在浏览器中直接执行 dart 代码。
    • Dart2js:将 Dart 代码编译为 JavaScript 的工具。
    • Dart Editor:基于 Eclipse 的全功能 IDE,并包含以上所有工具。支持代码补全、代码导航、快速修正、重构、调试等功能。

二、关键字

1 2 3 4 5 6 7 8
abstract as assert async await break case catch
class const continue covariant default deferred do dynamic
else enum export external extends factory false final
finally for Function get hide if implements import
in interface is library mixin new null on
operator part rethrow return set show static super
switch sync this throw true try typedef var
void while with yield - - - -

三、变量和常量

1、变量的声明

可以使用var、Object或dynamic,没有指定类型的变量,系统会根据赋值的类型来决定该变量的类型

  var name = "Zhang";
  print(name);//Zhang,字符串

  Object age = 20;
  print(age);//20,Int

  dynamic sex = "男";
  print(sex);//男,字符串
注意:使用var定义的变量,后面是不能重新赋值不同类型的值,也就是说类型不能变。其他两种定义的变量,后续是可以变更值的类型。
```dart
  var name = "Zhang";
  print(name);
  name = "Hai"; //这样是可以的
  print(name);
  name = 1;//这样就会报错
  print(name);
2、显式声明变量类型
  int money = 1;
  print(money);//1

  String address = "chengdu";
  print(address);//chengdu

  bool is_boy = true;
  print(is_boy);//true

注意:显式声明的变量,后续也不能更改值的类型。

3、变量的默认值

在Dart中,所以没有赋值的变量的默认值都是null,如int、String、bool等

  int money;
  print(money);//null

  String address;
  print(address); //null

  bool is_boy;
  print(is_boy);//null
4、final 和 const
  • 4.1、如果你不想改变一个变量的值,那么就可以使用Final和const来定义。区别在于,const是编译时常量,final是运行时常量,值可以被复制一次。如下:
  var age = 10;
  final g_age = age; //值可以从其他变量来
  print(g_age);//10

  const sex = "男";//值必须是固定的
  print(sex);//男

//在后面去设置两个常量的值,就会
  • 4.2、常量不能跟var同时使用
//会提示:Expected an identifier,
//因为var是用来修饰变量的,而final修饰的变量称之为常量(不能改变,只能赋值一次),所以不能这么混合使用
final var age = true;

//这一句提示这个:The const variable 'var' must be initialized   
//The name 'var' is already defined.
const var name= 'Zhang';
  • 4.3、如果是类级别的常量,需要使用static const
void main() {
  (new Test()).main();
}

class Test {
  static const name = "test";
  main() {
    print(name);
  }
}

四、数据类型

1、num类型

num是数字类型的父类,它下面有两个子类int和double

//整型
int a = 1;
print(a);//1

//字符串数字转整数
int b = int.parse('111');
print(b);//111

//浮点类型
double c = 10;
print(c);//10.0

//字符串转浮点
double d = double.parse('12');
print(d);//12.0

//整数转字符串
String e = 100.toString();
print(e+"-string");//100-string

//浮点数转整数
String f = 123.123.toString();
print(f+'-string');//123.123-string

//整数或浮点数保留几位小数转成字符串,并且会四舍五入
String g = 123.toStringAsFixed(3);
print(g+'-string');//123.000-string

String h = 123.1367.toStringAsFixed(3);
print(h+'-string');//123.137-string
2、String类型
  • Dart里面的String是一系列UTF-16代码单元
  • 可以使用单引号或双引号来创建一个字符串
  • 单引号或者双引号里面嵌套使用引号
  • 可以使用${表达式}将表达式的值放入字符串中
  • 字符串拼接使用“+”
//双引号
String str_1 = "ChengDu";
print(str_1);//ChengDu
//单引号
String str_2 = "ShangHai";
print(str_2);//ShangHai

//字符串拼接使用+号
print(str_1+str_2);//ChengDuShangHai

//双引号中有单引号
String str_3 = "Hello,'XiaoHai',hi917";
print(str_3);//Hello,'XiaoHai',hi917
//单引号中签到双引号
String str_4 = 'Hello,"XiaoHai",hi917';
print(str_4);//Hello,"XiaoHai",hi917

//表达式
String str_5 = "${str_3.toUpperCase()},haha";
print(str_5);//HELLO,'XIAOHAI',HI917,haha

参考文档:
https://blog.csdn.net/lyh1299259684/article/details/80526492
https://www.jianshu.com/p/9e5f4c81cc7d