Dart-语法基础
一、声明变量声明在程序执行期间可以具有不同的值。var name Peter; String name William; name Eason;延迟初始化变量。late String name; // 变量延时赋值 late String temperature readThermometer(); // 变量被使用时函数才会调用常量声明编译时确定的常量。const age 27; const int age 27; const name Peter; const String name Peter;运行时确定的常量。final timestamp DateTime.now().toString(); final String timestamp DateTime.now().toString(); final score calculateScore(); final double score calculateScore();二、类型num类型num 类型覆盖了任何整数和浮点数。// 整形 var count 1; int age 12; num length 50; // 浮点数 var score 87.5; double price 29.99; num width 375.0; // string - int int count int.parse(1); // 1 // string - double double price double.parse(29.99); // 29.99 // int - string String countStr 1.toString(); // 1 // double - string String priceStr 29.99.toStringAsFixed(2); // 29.99bool类型bool 由 true 和 false 两个逻辑值组成。bool isEmpty .isEmpty; bool isZero (int.parse(1) 0);String类型String 字符串类型。String name Peter; String content1 Hes name is ${name}.; String content2 Hes name is name .;List类型var list1 const [Car, Boat, Plane]; ListString list2 []; // 不支持 ListString() 构造 ListString fruits [apple, orange]; fruits.add(banana); // [apple, orange, banana] fruits.addAll([pear]); // [apple, orange, banana, pear] fruits.remove(orange); // [apple, banana, pear] fruits.removeAt(0); // [banana, pear] fruits.insert(1, orange); // [banana, orange, pear] int idx fruits.indexOf(orange); // 1 bool isContains fruits.contains(apple); // false fruits.clear(); // []Set类型var halogens {fluorine, chlorine, bromine, iodine, astatine}; var names SetString(); SetString fruits {apple, orange}; fruits.add(banana); // {apple, orange, banana} fruits.addAll({pear}); // {apple, orange, banana, pear} fruits.remove(apple); // {orange, banana, pear} fruits.clear(); // {}Map类型Map 类型存储 key-value 键值对。var names const {first: Peter, second: Lucy, third: Eason}; var gifts MapString, String(); Mapint, String fruits {1: apple, 2: orange}; fruits[3] banana; // {1: apple, 2: orange, 3: banana} fruits.remove(1); // {2: orange, 3: banana} fruits.clear(); // {}Object类型Object 是 Dart 类型系统的根类用于定义任意类型。MapString, Object person { name: Eason, age: 25 }; final String name person[name] as String; // as 强转不安全 print(name: name); final name person[name]; if (name is String) { // is 判断安全 print(name: name); }dynamic类型dynamic 是 Dart 里的动态类型编译时不做类型检查运行时才确定具体类型常用于 JSON 解析和原生平台通讯。// JSON 解析 import dart:convert; final dynamic json jsonDecode({name: Eason,age: 25}); print(json[name]); // 原生平台通讯 final dynamic result await t_methodChannel.invokeMethod(getDeviceInfo);void类型void 用于指定函数没有返回值。void getDeviceId() { // do somethind }enum类型enum 枚举用于声明一组相关值的通用类型。// 声明 enum Direction { left, right, top, bottom } // 应用 const direction Direction.left;// 增强型枚举 enum Direction { left(1001), right(1002), top(1003), bottom(1004); final int value; const Direction(this.value); } const value Direction.left.value;T泛型泛型 类型参数化把“具体类型”变成“参数”让同一份代码能安全地作用于多种类型。// 泛型类 class BoxT { final T value; Box(this.value); } final box Boxint(1); // 泛型方法 T fetchDataT(ListT datas) { return datas.first; } final data fetchDataString([1, 2, 3]); // 泛型接口 abstract class CacheT { void setValue(String key, T value); T? getValue(String key); } class DataCacheT implements CacheT { final MapString, T map {}; override void setValue(String key, T value) map[key] value; override T? getValue(String key) map[key]; } final cache DataCacheString(); cache.setValue(key, value); final value cache.getValue(key);三、语句if语句if (condition) { // do something }switch语句switch (type) { case 0: // do something case 1 || 2: // 命中1或2 // do something default: // do something }for语句for (var i 0; i 5; i) { if (i 1) { continue; } // do something } for (final name in names) { if (name Peter) { break; } // do something }while语句while (isContinue) { // do something } do { // do something } while (isContinue);try-catch语句try { // do something } catch (e) { print(Error: $e); } finally { }Assert语句// 断言 - 开发环境 assert(text ! null);四、操作符三元运算符final String str value ? value : ; final String str1 value ?? ;可选链运算符1变量/属性的定义int? number null; String value number?.toString();2方法传参String execute(String str1, String? str2) { return str1 (str2 ?? ); } execute(a, null);五、函数函数声明/调用必选位置参数的函数声明。void execute(String arg1, String? arg2) { // do something } execute(title, null);bool plus(int a, int b) { return a b; } bool plus(int a, int b) a b; // 方法简写可选位置参数的函数声明。bool execute([int? number, String name Peter]) { return (number?.toString 7); } execute(); execute(7); execute(7, Eason);// 必选位置 可选位置 bool execute(int? number, [String? name]) { return (number?.toString 7); } execute(7); execute(7, Peter);可选命名参数的函数声明。bool execute({int? number, required String name, double? weight}) { return (number?.toString 7); } execute(name: Peter); execute(name: Peter, weight: 125.5); execute(number: 7, name: Peter, weight: 125.5);// 必选位置 可选命名 bool execute(int? number, {required String name, double? weight}) { return (number?.toString 7); } execute(7, name: Peter); execute(7, name: Peter, weight: 125.5);函数类型typedef CallbackFunc int Function(String message); void execute(CallbackFunc callback) { int code callBack(success); print(code: ${code}); } int callback(String message) { print(message: ${message}); retrun 0; } execute(callback);async/awaitasync/await 可以让异步逻辑同步执行不会造成同步阻塞。async 用于申明一个 function 是异步的返回的是一个 Future 对象await 用于等待一个异步方法执行完成。import dart:async; FutureString checkVersion() async { var version await lookUpVersion(); return version; } this.checkVersion().then((String version) { print(version: $version); }).catchError((e) { print(exception: $e); });六、类类声明引入一个新类型并定义其字段、方法和构造函数。class Car { final String name; final String model; String style ; double? price; Car(String name, String model) : name name, model model; void execute() { print(${this.name} ${this.model}); } }构造函数1不带参数Car(); // 语法糖初始化2带参数Car(this.name, this.model); // 语法糖初始化 Car(String name, String model) : name name, model model;3调用时机// 不带参数 final car1 Car(); // 带参数 final car2 Car(Tesla, Model 3);实例方法class Car { void execute() { // do something } } final car Car(); car.execute();Getter/Setter方法class Car { late double _right; set right(double value) _right value; double get right _right; void execute() { this.right 3.14; // set print(${this.right}); // get } }类继承class BydCar extends Car { override void execute() { super.execute(); // 调用父类方法 } }class BydCar extends Car { override void execute() { // 方法重写 } }接口抽象abstract class CarInterface { void drive(); }接口继承abstract class BydInterface extends CarInterface { void automaticParking(); }接口实现class BydCar extends Car implements BydInterface { void drive() { // drive } void automaticParking() { // automatic parking } }静态属性// 声明 class EventConstants { static const bool AVAILABLE true; static const String LOADD_EVENT onLoad; static const String UNLOAD_EVENT onUnload; } // 应用 const available EventConstants.AVAILABLE;静态方法// 声明 class DeviceUtils { static String getDeviceName() { return iphone 16 pro max; } } // 应用 const deviceName DeviceUtils.getDeviceName();七、引用导入系统核心库。import dart:io; import dart:ui as ui; final double kScreenWidth ui.window.physicalSize.width/ui.window.devicePixelRatio;导入公共组件和模块代码。import package:sqflite/sqflite.dart; import package:test_module/test.dart;本文参考于Dart中文网Dart开发语言