dart的那些语法

1. 在list中使用判断句
void main(List args) {
  bool flag = false;
  List li = [];
  li.addAll(["geek", if (flag == true) "ll", flag == true ? "xx" : null]);
  print(li);
}

之前写js数组就有这样的需求,满足条件则在数组的指定位置添加对应的元素,在js的数组中直接用if会报错,用三元运算符返回undefined会占位,相比之前dart的单语句判断写在list中方便直观多了;但是if(){}这种花括号语句写在list中会报错,逻辑复杂的话只好用list.insert了。三元运算符在list中返回null会占位。

三元运算符返回null占位

js 数组

这是dart比较有趣的地方,甚至可以直接在list内写for循环。

  var ls = [1, 2, for (var i in List.generate(3, (x) => x + 3)) i + 1];
  print(ls); // [1, 2, 4, 5, 6]

也可以在map中使用

class Person {
  final String uid;
  String? avatar;
  String? name;
  Person({
    required this.uid,
    this.avatar,
    this.name,
  });

  Map toJson() => {
        'uid': uid,
        if (avatar != null) 'avatar': avatar,
        if (name != null) 'name': name,
      };
}

参考 幾個有趣的 Dart 語法

2. dart中没有联合类型

给函数传递widget或者string类型的参数只能将该参数设置为dynamic,来自Is there a way to have an argument with two types in Dart?示例

class NavTo {
  dynamic route;
  push(BuildContext context) {
    if (route is String) {
       ...
    } else if (route is Widget) {
       ...
    }
  }
}

你可能感兴趣的:(dart的那些语法)