SYSTEM: ONLINE
VER. ...
SLEET LOG
SLEET'S LOG
/2025年4月9日/5 MIN READ

Dart 入门笔记

Dart

五种基本类型

  1. int

  2. double

  3. String

  4. bool

  5. dynamic 动态类型

int, double

dart
main(){ int amount1 = 100; var amount2 = 200; print('Amount1: $amount1 | Amount2: $amount2 \n'); double dAmount1 = 100.11; var dAmount2 = 200.22; bool isTrue = true; var isFalse = false; dynamic weakVariable = 100; weakVariable = 'newValue'; }

String

dart
String name1 = 'name1'; var name2 = "name2"; // 单双引号都可以 var s = r'In a raw string, not even \n gets special treatment.'; // Raw String,这里的 \n 也会被打印出来 // 换行字符串 var s1 = ''' you can create multi-line strings like this one. '''; var s2 = """This is also a multi-line string.""";

字符串和数字的转化

dart
// Stirng -> int var one = int.parse('1'); assert(one == 1); // String -> double var onePointOne = double.parse('1.1'); assert(onePointOne == 1.1); // int -> String String oneAsString = 1.toString(); assert(oneAsString == '1'); // double -> String String piAsString = 3.14159.toStringAsFixed(2); assert(piAsString == '3.14');

常量 const

dart
const aConstNum = 0;

运算符

(?.), (??), (??=)

dart
main(){ var n; int number; number = n?.num ?? 0; }
dart
main(){ int number; print(number ??= 100); // 100 print(number); // 同样输出 100。100 被永久分配给 number }

Type Test

dart
main(){ var x = 100; if(x is int){ print('integer'); } }

条件语句

dart
main(){ int number = 90; if(number % 2 == 0){ print("Even"); } else if (number % 3 == 0){ print('Odd'); } else { print('Confused'); } }
dart
main(){ int number = 0; switch(number){ case 0: print('Even'); break; case 1: print('Odd'); break; default: print('Confused'); } }

笔记内容来自:Dart Programming Tutorial - Full Course

循环

standard for loop

dart
for(var i = 0; i < 10; i++){ print(i); }

for-in loop

dart
var numbers = [1, 2, 3]; for(var n in numbers) { print(n); }

forEach loop

dart
var numbers = [1, 2, 3]; numbers.forEach((n) => print(n));

while loop

dart
int num = 5; while(num > 0){ print(num); num -= 1; } // 或者 do { print(num); num -= 1; } while(num > 0);

break and continue

dart
for(var i = 0; i < 10; i++){ if(i > 5) break; print(1); } for(var i = 0; i < 10; i++){ if(i % 2 == 0) continue; print(1); }

collection

list 数组

dart
// 其中 <String> 可选,能限制数组的类型;const 也是可选的,防止数组的元素被变更 List <String> names = const ['lzz', 'nz']; print(names[0], names.length);

复制数组

dart
// 直接 names2 = names,获得的只是引用 List <String> names = ['Jack', 'Jill']; var names2 = [...names];

Set

dart
var halogens = {'name1', 'name2', 'name1'}; for(var x in halogens){ print(x); // name1 只打印一次 }

创建空集合

dart
var halogens = <String>{}; Set <String> names = {};

Map

dart
var map = { 'one': 'one', 'two': 'two' }; print(map['one']);
dart
var map = Map(); map['first'] = 'one';

Function

dart
dynamic square(var num) { return num * num; } // 或者箭头函数 dynamic square(var num) => num * num;

命名参数

dart
main(){ print(sum(num2: 4, num1: 2)); } dynamic sum({var num1, var num2}) => num1 + num2;

或者像这样混用也可以:

dart
main(){ print(sum(4, num2: 2)); } dynamic sum(var num1, {var num2}) => num1 + num2;

dart 也支持默认参数

dart
main(){ print(sum(4)); } dynamic sum(var num1, {var num2=0}) => num1 + num2;

还支持将某参数设置为可选

dart
main(){ // 没有传第二个参数的情况下也不会报错 print(sum(4)); } dynamic sum(var num1, [var num2=0]) => num1 + (num2 ?? 0);

Class

dart
class Person { final name; // 只能在构造函数里被赋值一次 int age; static const int number = 10; // 静态常量。只能通过类访问(Person.age),而不能通过实例(person1.age) // 或者:Person(this.name, [this.age = 18]); Person(String name, [int age = 18]) { this.name = name; this.age = age; } // 在默认构造函数之外,如何创造其他构造函数(name constructor) Person.guest() { // 在 Dart 中,this 关键字用于明确区分类的 实例变量 和构造函数或方法中的 局部变量/参数,但当没有歧义时,可以省略 this。 name = 'Guest'; age = 18; } // 实例方法 void showOutput() { print(name); print(age); } } void main() { Person person1 = Person(); person1.name = 'name'; person1.age = 18; person1.showOutput(); // 或者 Person person2 = Person('name2'); var person3 = Person.guest(); person3.showOutput(); }

继承

dart
class Vehicle { String model; int year; Vehicle(this.model, this.year) { print(this.model); print(this.year); } void showOutput() { print(model); print(year); } } class Car extends Vehicle { double price; Car(String model, int year, this.price) : super(model, year); void showOutput() { super.showOutput(); print(this.price); } }

方法覆盖:@override

dart
class Vehicle { String model; int year; Vehicle(this.model, this.year) { print(this.model); print(this.year); } void showOutput() { print(model); print(year); } } class Car extends Vehicle { double price; Car(String model, int year, this.price) : super(model, year); @override void showOutput() { print(this.price); } }

getter 和 setter

dart
class Rectangle { num left, top, width, height; Rectangle(this.left, this.top, this.width, this.height); num get right => left + width; // 这并不是真的在给 right 赋值,而是:left 应该自动变成 value - width,才能使 right = value 成立 set right(num value) => left = value - width; }

Exception Handling

dart
int mustGreaterThanZero(int val) { if(val < 0){ throw Exception('Value must be greater than zero'); } return val; } void letVerifyTheValue(var val) { var valueVerification; try { valueVerification = mustGreaterThanZero(val); } catch(e) { print(e); } finally { } } // 如果程序有特定类型的错误 try { } on OutOfLlamasException { } on Exception catch (e) { } catch (e) { }
Article Index