dart 基本语法

本文最后更新于:2022年4月22日 上午

dart 基本语法

变量声明

var 类型推导

const必须赋值常量

final可以运行时赋值

dynamic 动态类型,最后一次赋值时是它的类型

dart没有非零即真和非空即真

final date = DateTime.now(); // 正确
const date = DateTime.now(); // 错误

字符串

单引号

双引号

三引号 类似模板字符串

字符串拼接 ‘${name}’ 或 ‘$name’ 没有运算符的时候可以省略大括号

数组

List<String> names = ['a','b','c'];

Set<int> nums = {1,2,3,4,5}; 

///  for in 进行遍历
for (String name in names) {

}

names.add();
names.remove();

Map

Map<String, dynamic> info = {
  'name': 'lfm',
  'age': 18,
  'height': 1.88
}

函数

dart 没有函数的重载

返回值可以通过类型推导,但是开发时不推荐

void fn(String name) {
  print(name);
}

// 位置可选参数
void fn(String name, [int age, double height]){
  print(name, age);
}

// 命名可选参数
void fn(String name, {int age, double height}){
  print(name, age);
}

// 参数的默认值
void fn(String name, {int age = 18, double height = 1.88}){
  print(name, age);
}

fn('lfm', age: 18, height: 2.00);

indentical(p1, p2); // 判断两个对象是否相等;

函数是一等公民

将函数作为参数传递

将函数作为返回值

匿名函数

test(() {
  print("匿名函数被调用");
});

test(() => print("匿名箭头函数被调用"));

void test(Function fn) {
  fn();
}

箭头函数

和js不一样,只有函数体只有一行才能写成箭头函数,不能有多行。

test(() => print("匿名箭头函数被调用"));

typedef

test2((num1, num2) => num1 + num2);


void test2(int sum(int num1, int num2)) {
  sum(10, 20);
}

/****************************************/

test3((num1, num2) => num1 + num2);

typedef sumType = int Function(int num1, int num2);

void test3(sumType sum) {
  sum(10, 20);
}

运算符

??=

// 当 name 是空时才赋值为 小明
var name = null;
name ??= '小明';

??

// 前一个变量为 null 时则使用后面的值
var name2 = name ?? '小红';

.. 级联调用

final p1 = Person()
  ..name = '小彤'
  ..sayHello()
  ..sayName();


class Person {
  String name = '';

  void sayName() => print(this.name);
  void sayHello() => print('hello');
}

enum 枚举

通过 enum来定义枚举,所有的枚举都有 values每个枚举的item都拥有其对应的index

enum Colors { red, blue, green }

final color = SystemColors.blue;
print(SystemColors.values);
print(color.index);

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议,转载请注明出处。