打开Android Studio创立一个新工程,将main.dart中剩余代码清理一下

Flutter基础:Dart 基础语法

一、var、final 和 const

1.1 var

  • dart 中运用var声明一个变量,能够赋值不同的类型;
  • var 声明的变量假如没有初始化,那么他的值为null
void main() {
    var a;
    print(a);
    a = 'hello world';
    print(a);
    a = 10;
    print(a);
}
履行成果:
flutter: null
flutter: hello world
flutter: 10

1.2 final

  • 运用 final 声明一个只能赋值一次变量
  • 没有赋值的 final 变量是不能运用的,会报错;
  • 他是终究变量。
void main() {
    final c;
    c = 10;
    print(c);
}
履行成果:
flutter: 10

1.3 const

  • const 是常量,有必要有初始值
  • 不可修正。
void main() {
    const d = 20;
    print(d);
}
履行成果:
flutter: 20

二、Dart 的数据类型之 num

2.1 num

示例:

void numDemo() {
  // 数值型 num : int & double
  num a = 10;
  print(a);
  a = 1.5;
  print(a);
}
履行成果:
flutter: 10
flutter: 1.5

2.2 int 、double

int 和 double 都是承继自 num:

abstract class int extends num {
    ...
}
abstract class double extends num {
    ...
}

示例:

void numDemo() {
    int b = 10;
    double c = 1.5;
    print(b);
    print(c);
}
履行成果:
flutter: 10
flutter: 1.5

2.3 算术运算符

dart 中除了+ - * / %等这些常见的算术运算符,还有个特有的运算符~/(取整)。

void numDemo() {
    double b = 10.0;
    int c = 8;
    // 取整
    print(b ~/ c);
    // 转换类型
    print(b.toInt().isEven); // 偶数
    print(c.toDouble());
    print('a + b = ${a + b}');
}
履行成果:
flutter: 1
flutter: true
flutter: 8.0
flutter: a + b = 11.5

三、Dart 的数据类型 String

  • Dart 中的字符串运用单引号双引号创立;
  • 三个引号双引号 创立多行字符串;
void stringDmeo() {
    var a = 'aa';
    var b = "bb";
    print(a + b);
    String c = "11\n"
    "22\n"
    "33\n";
    print(c);
    String d = '''44
    55
    66''';
    print(d);
    print(a[0]);
    print(a + "_____");
    print(a * 2);
    String str3 = "str3\nstr3";   // 需求转译
    String str4 = r"str3 \nstr3"; // 不需求转译
    print(str3);
    print(str4);
    print(str3.length);
}
履行成果:
flutter: aabb
flutter: 11
22
33
flutter: 44
  55
  66
flutter: a
flutter: aa_____
flutter: aaaa
flutter: str3
str3
flutter: str3 \nstr3
flutter: 9

四、Dart 的数据类型 list

  • Dart 中的列表,能够存放不同的数据类型的;
  • 创立可变list var list1 = [1,2,3];
  • 创立不可变list var list2 = const [1,2,3]。
void listDemo() {
  var list1 = const [1, 2, 3, 'aaa'];
  var list3 = ['bbb', 'ccc'];
  print(list3.length);
  list3.add('ddd'); // 增加
  print(list3);
  list3.insert(1, 'eee'); // 插入
  print(list3);
  list3.remove('bbb'); // 删除
  print(list3);
  list3.clear(); // 清除
  print(list3);
  var list4 = [1, 3, 5, 2, 4, 9, 8, 6];
  list4.sort();
  print(list4);
  print(list4.sublist(4, 7)); // 截取
}
履行成果:
flutter: 2
flutter: [bbb, ccc, ddd]
flutter: [bbb, eee, ccc, ddd]
flutter: [eee, ccc, ddd]
flutter: []
flutter: [1, 2, 3, 4, 5, 6, 8, 9]
flutter: [5, 6, 8]

五、Dart 的数据类型 Map

  • Dart 中的 Map 键值对;
  • 创立可变的Map: var json1 = {‘one’:’11’,’two’:’22’};
  • 创立不可变的Map:var json1 = const {‘one’:’11’,’two’:’22’}。
void mapDemo() {
  var json1 = {'one': '11', 'two': '22'};
  print(json1);
  print(json1['one']); //取值
  json1['one'] = '逐个';
  print(json1);
  var json2 = const {'one': '11', 'two': '22'};
  print(json2.length);
  print(json2.values);
  print(json2.keys);
  var list = ['11', '22', '33'];
  print(list.asMap());
}
履行成果:
flutter: {one: 11, two: 22}
flutter: 11
flutter: {one: 逐个, two: 22}
flutter: 2
flutter: (11, 22)
flutter: (one, two)
flutter: {0: 11, 1: 22, 2: 33}

六、Dart 的运算符??= 和 ??

  • Dart中的运算符;
  • 赋值运算??=
  • 条件表达式??
void operatorDemo() {
  var a;
  a ??= 10;
  a ??= 5; //假如a为nil就赋值,假如有值就直接回来。
  print(a);
  var b;
  print(b ?? a); //?? 假如左边有值回来左边,没有就回来 右边!
}
履行成果:
flutter: 10
flutter: 10

七、Dart 中的箭头函数

  • Dart 中的办法;
  • 办法也是一个目标;
  • 回来值和参数类型能够省略;
  • 当办法的履行句子只有一句的时分,能够运用箭头函数 => 表达式。
void main() => print(sum(4, 5));
sum (a, b) => a + b; // 不建议这样写,简单懵逼
履行成果:
flutter: 9

八、Dart 办法的可选参数

  • 可选参数传递参数的时分有必要带上形参的姓名;
  • 调用办法时,可选参数的位置能够不按次序。
void main() => print(sum2(1, c: 3, b: 2,));
sum2(int a, {int? b, int? c}) { // int? 告知编译器,能够为空,我处理了后边为空的情况
  b ??= 0;
  c ??= 0;
  return a + b + c;
}
履行成果:
flutter: 6

还有一种写法是需求按次序的:

void main() => print(sum3(1, 2, 3);
int sum3(int a, [int b = 0, int c = 0]) {
  return a - b + c;
}
履行成果:
flutter: 6

九、Dart 办法作为参数传递

办法也是一个目标:运用场景作为参数传递!!

void functionDemo() {
  var list = [1, 2, 3, 4];
  // list.forEach(print);
  int b = 0;
  //匿名办法作为参数的实战。
  forEachDemo(list, print);
}
forEachDemo(List list, void func(var element)) {
  for (var e in list) func(e);
}
履行成果:
flutter: 1
flutter: 2
flutter: 3
flutter: 4

十、Dart 中的匿名函数

匿名办法:没有办法名称的办法!

void functionDemo() {
  var list = [1, 2, 3, 4];
  // list.forEach(print);
  int b = 0;
  //匿名办法作为参数的实战。
  forEachDemo(list, (var a) {
    b++;
    print('元素$b = $a');
  });
  var func = () {
    print('匿名办法');
  };
  func();
  //当即履行办法、函数
  (() {
    print("当即履行函数");
  })();
}
履行成果:
flutter: 元素1 = 1
flutter: 元素2 = 2
flutter: 元素3 = 3
flutter: 元素4 = 4
flutter: 匿名办法
flutter: 当即履行函数

十一、Dart 中的闭包

  • 定义在函数里边的函数便是闭包,闭包也是一个目标;
  • 闭包的效果:能够拜访外部函数的局部变量
void closureDemo() {
  var func = funA();
  func();
  func();
  func();
  func();
  var func2 = funA();
  func2();
  func2();
  func2();
  func2();
}
funA() {
  int count = 0;
  return () => print(count++); //这个匿名函数便是一个闭包
}
履行成果:
flutter: 0
flutter: 1
flutter: 2
flutter: 3
flutter: 0
flutter: 1
flutter: 2
flutter: 3