Flutter 之Dart语法

82 阅读1分钟

void main() {
  bool a = true;
  String b = "sss";
  num c = 1;
  int d = 2;
  double e = 2.2;

  //list
  var list = [1, 2, 3];
  list.add(5);
  var list1 = [1, 2, 3];
  list1.add(3);
  print('${list1[1]}');

  //map
  var map = {
    "1",
    "1"
        "2",
    "2"
  };

  var map1 = Map();
  var map2 = Map<String, String>();
  map2["1"] = "2";

  // set
  var names = {"zhangsan", "lisi"};
  var names1 = <String>{};

  //Rune

  //Symbol

  //常量用const
  const g = 5;
  final cc =6;

  print('xxxxxxxx');

  //方法
  methodA(true, 1);

  var result = methodB(false, 2);

  //运算符

  //as is is!
  var s = "";
  if (s is String) {}

  (s as num).toString();

  var bb = 1;

  // 如果b为空时,将变量赋值给b,否则,b的值保持不变。
  bb ??= 2;

  //三目运算符
  (bb == 1) ? 1 : 2;

  //expr1 ?? expr2   如果 expr1 是 non-null, 返回 expr1 的值; 否则, 执行并返回 expr2 的值。
  //类似于kotlin     ?:   写法

  //?.跟kotlin效果相同
  //级联运算符 (..)

  //流程控制
  if (true) {
  } else {}

  //循环
  for (var i = 0; i < 2; i++) {}

  var callbacks = [];
  for (int i1 = 0; i1 < 2; i1++) {
    callbacks.add(() => print(i1));
  }
  callbacks.forEach((element) => {element()});

  //for、while、do while使用同java    break  continue使用同java
  // switch case 用法同java

  //异常
  try {
    //breedMoreLlamas();
  } catch (e) {
    print('Error: $e'); // Handle the exception first.
  } finally {
    //cleanLlamaStalls(); // Then clean up.
  }

  //如果仅需要部分处理异常, 那么可以使用关键字 rethrow 将异常重新抛出。
  //void misbehave() {
  //   try {
  //     dynamic foo = true;
  //     print(foo++); // Runtime error
  //   } catch (e) {
  //     print('misbehave() partially handled ${e.runtimeType}.');
  //     rethrow; // Allow callers to see the exception.
  //   }
  // }
  //
  // void main() {
  //   try {
  //     misbehave();
  //   } catch (e) {
  //     print('main() finished handling ${e.runtimeType}.');
  //   }
  // }

  //try {
  //   breedMoreLlamas();
  // } on OutOfLlamasException {
  //   // 一个特殊的异常
  //   buyMoreLlamas();
  // } on Exception catch (e) {
  //   // 其他任何异常
  //   print('Unknown exception: $e');
  // } catch (e) {
  //   // 没有指定的类型,处理所有异常
  //   print('Something really unknown: $e');
  // }
}

void methodA(bool bold, int a) {}

String methodB(bool bold, int a) {
  return "";
}

//位置可选参数
String methodC(String name, String age, [String? job]) {
  return '$name $age $job';
}

void methodD({bool bold = true}) {}

//类
class Person {
  String? name;
  int? age;
  // Person(String name, int age) {
  //   this.name = name;
  //   this.age = age;
  // }

  Person(this.name,this.age);

  Person.black(String name){
    this.name = name;
    age = 18;
  }

  void printSelf(){

  }
}

class BlackPerson extends Person{
  BlackPerson.black(String name):super.black(name){
    print(name);
  }
}


//get set 重写
class Rectangle {
  num left, top, width, height;

  Rectangle(this.left, this.top, this.width, this.height);

  // 定义两个计算属性: right 和 bottom。
  num get right => left + width;
  set right(num value) => left = value - width;
  num get bottom => top + height;
  set bottom(num value) => top = value - height;
}

//抽象类  同java
abstract class Doer {
  // 定义实例变量和方法 ...

  void doSomething(); // 定义一个抽象方法。
}

class EffectiveDoer extends Doer {
  void doSomething() {
    // 提供方法实现,所以这里的方法就不是抽象方法了...
  }
}

//继承使用和实现接口同java extents implements

//接口
//每一个类都是一个接口

class WhitePerson implements Person{
  @override
  int? age;

  @override
  String? name;

  @override
  void printSelf() {
    // TODO: implement printSelf
  }

}

//枚举
enum Color { red, green, blue }


//静态变量和方法
class Queue {
  static const initialCapacity = 16;
// ···
}

class Point {
  num x, y;
  Point(this.x, this.y);

  static num distanceBetween(Point a, Point b) {
    var dx = a.x - b.x;
    var dy = a.y - b.y;
    return sqrt(dx * dx + dy * dy);
  }
}