跳到正文
W Winse Blog
mobile dev 6 min read

Dart 语言入门指南:Flutter开发第一步

Dart 是 Google 开发的面向对象的编程语言,也是 Flutter 框架的官方开发语言,具有简洁的语法和强大的异步编程能力。本文将带你快速入门 Dart 语言,从基本语法到面向对象编程,再到 Flutter 项目的依赖管理和异步函数的使用。

# 一、基本类型

Dart 是强类型语言,同时也支持类型推断。以下是 Dart 的基本数据类型:

// 数字类型 int age = 18;  // 整数值 double price = 3.14;  // 浮点数 num number = 10;  // num 可以是 int 或 double // 字符串(UTF-16 编码的字符序列) String name = 'John'; String greeting = "Hello, $name!";  // 字符串插值 String multiLine = '''   多行   字符串 '''; // 布尔值 bool isActive = true; bool isActive = false; // 列表 (类似其他语言的数组,有序集合) List<int> numbers = [1, 2, 3]; var names = ['Alice', 'Bob', 'Charlie'];  // 类型推断 List<String> print(names[0]); print(names); // 集合 (无序且唯一集合) var uniqueNumbers = {1, 2, 3};  // Set<int> // 即使你写了两个 2,集合中也只保留一个。 Set<String> countries = {'USA', 'China', 'Japan'}; // 映射 (键值对集合) Map<String, int> scores = {'Alice': 100, 'Bob': 90}; var capitals = {   'USA': 'Washington',   'China': 'Beijing' }; print(capitals['China']);

# 二、变量声明

Dart 提供了几种声明变量的方式:

// 明确指定类型 String name = 'Alice'; // 使用 var,自动推断类型 var age = 30;  // 推断为 int // age = 30.0;  // 不能再赋值double类型的值!!! // late 延迟初始化 late String description; void init() {   description = 'Some description'; } // dynamic 动态类型,可以改变类型 dynamic dynamicVar = 'hello'; dynamicVar = 100;  // 可以重新赋值为不同类型

常量声明

// 使用 final。只能赋值一次,运行时确定类型 final city = 'Beijing'; // 使用 const,编译时常量 const double pi = 3.14159;

区别:

  • • var 可以重新赋值,但值类型不能变。

  • • dynamic 类型也可以变。

  • • final 是运行时常量,一旦赋值不能更改。

  • • const 是编译时常量,必须在定义时确定值。

# 三、运算符

Dart 支持大多数常见的运算符:

  1. 1. 算术运算符+-*/%~/ (整除), ++--

  2. 2. 关系运算符==!=><>=<=

  3. 3. 逻辑运算符&&||!

  4. 4. 赋值运算符=+=-=*=/=%=~/=??=(如果为 null 才赋值)

  5. 5. 条件运算符?:?? (空值合并)

  6. 6. 级联运算符.. (允许对同一对象进行一系列操作)

  7. 7. 类型测试运算符isis!as

// 算术运算符 var sum = 1 + 2; var product = 2 * 3; var division = 5 / 2;  // 结果是 2.5 var integerDivision = 5 ~/ 2;  // 结果是 2 int a = 10, b = 3; print(a + b);  // 13 print(a - b);  // 7 print(a * b);  // 30 print(a / b);  // 3.33... print(a ~/ b);  // 3 (整数除) print(a % b);  // 1 (取余) // 字符串拼接 String first = 'Hello'; String second = 'World'; String combined = first + ' ' + second; print(combined);  // Hello World // 关系运算符 var isEqual = (5 == 5); var isGreater = (10 > 5); // 逻辑运算符 var and = (true && false); var or = (true || false); var not = !true; // 赋值运算符 var x = 5; x += 3;  // x = x + 3 String result = age >= 18 ? '成人' : '未成年'; print(result);  // 成人 // 条件表达式 var result = (age > 18) ? 'adult' : 'child'; var name = username ?? 'Guest';  // 如果 username 为 null,则使用默认值 'Guest' // 级联运算符 (..) var person = Person()   ..name = 'Alice'   ..age = 30   ..greet(); // 类型测试运算符 if (person is Person) {   print('It is a Person'); }

# 四、条件语句

switch字符串上也是能用的。

// if-else if (age < 18) {   print('未成年'); } else if (age < 65) {   print('成年人'); } else {   print('退休了'); } // switch-case var grade = 'A'; switch (grade) {   case 'A':     print('Excellent');     break;   case 'B':     print('Good');     break;   case 'C':     print('Fair');     break;   default:     print('Unknown'); }

# 五、循环语句

Dart 支持多种循环方式:

// for 循环 for (var i = 0; i < 5; i++) {   print(i); } // for-in 循环 var numbers = [1, 2, 3]; for (var number in numbers) {   print(number); } // while 循环 var i = 0; while (i < 5) {   print(i);   i++; } // do-while 循环 var j = 0; do {   print(j);   j++; } while (j < 5); // forEach 方法 numbers.forEach((number) => print(number)); // map 方法 var doubled = numbers.map((number) => number * 2).toList();

# 六、函数

Dart 中的函数也是对象,是一等公民,可以作为参数传递或赋值给变量。

// 基本函数 int add(int a, int b) {   return a + b; } // 箭头函数 (单行函数) int multiply(int a, int b) => a * b; // 可选位置参数(用方括号 `[]`) String sayHello(String name, [String? title]) {   return title == null ? 'Hello $name' : 'Hello $title $name'; } // 可选命名参数(用花括号 `{}`) void enableFlags({bool? bold, bool? hidden}) {   // ... } // 默认参数值 void connect({String host = 'localhost', int port = 8080}) {   print('$host:$port'); } // 匿名函数 var list = ['a', 'b', 'c']; list.forEach((item) {   print(item); }); // 高阶函数 Function makeAdder(int addBy) {   return (int i) => addBy + i; } var add2 = makeAdder(2); print(add2(3));  // 输出 5

# 七、面向对象编程(类与对象)

Dart 是面向对象的语言,支持类、继承、接口和混入:

// 基本类 class Person {   // 实例变量   String name;   int age;      // 构造函数   Person(this.name, this.age);      // 命名构造函数   Person.guest() {     name = 'Guest';     age = 18;   }      // 方法   void greet() {     print('Hello, my name is $name');   }      // 重写 toString   @override   String toString() => 'Person(name: $name, age: $age)'; } // 继承 class Student extends Person {   String major;      // 调用父类构造函数   Student(String name, int age, this.major) : super(name, age);      // 重写方法   @override   void greet() {     print('Hello, I am $name, studying $major');   } } // 抽象类 abstract class Shape {   double area();  // 抽象方法 } class Circle implements Shape {   double radius;      Circle(this.radius);      @override   double area() => 3.14 * radius * radius; } // Getter 和 Setter class Rectangle {   double width, height;      Rectangle(this.width, this.height);      double get area => width * height;   set area(double value) => width = value / height; } // 混入 (Mixin) mixin Musical {   void playMusic() {     print('Playing music');   } } class Performer with Musical {   // 现在有 playMusic 方法 } // 工厂构造函数 class Logger {   final String name;   static final Map<String, Logger> _cache = {};      factory Logger(String name) {     return _cache.putIfAbsent(name, () => Logger._internal(name));   }      Logger._internal(this.name); }

# 八、工程包的依赖引用

Dart 使用 pub 作为包管理器,依赖在 pubspec.yaml 中声明:

name: my_app description: A sample Dart application version: 1.0.0 environment:   sdk: '>=2.12.0 <3.0.0' dependencies:   flutter:     sdk: flutter   http: ^1.4.0  # 版本约束   provider: ^6.1.5 dev_dependencies:   flutter_test:     sdk: flutter   test: ^1.26.2

然后运行命令:

flutter pub get

在代码中导入包:

// 导入标准库 import 'dart:math'; // 导入其他文件 import 'package:my_app/utils.dart'; import 'package:http/http.dart' as http; // 部分导入 import 'package:large_library/utils.dart' show someFunction; // 相对路径导入 import './models/user.dart'; void greet() async {   await hello.loadLibrary();   hello.printGreeting(); }

# 九、异步编程

Dart 使用 Future 和 async/await 处理异步操作:

// Future Future<String> fetchUserOrder() {   return Future.delayed(Duration(seconds: 2), () => 'Large Latte'); } void main() {   print('Fetching user order...');   fetchUserOrder()     .then((order) => print('Order: $order'))     .catchError((error) => print('Error: $error'))     .whenComplete(() => print('Done')); } // 使用async/await,以及其异常处理 Future<void> printOrderMessage() async {   try {     var order = await fetchUserOrder();     print('Order: $order');   } catch (error) {     print('Error: $error');   } finally {     print('Done');   } } // Stream 用于处理一系列异步事件(如监听按钮点击、WebSocket 数据流) Stream<int> countStream(int to) async* {   for (int i = 1; i <= to; i++) {     await Future.delayed(Duration(seconds: 1));     yield i;   } } void main() async {   var stream = countStream(5);   await for (var count in stream) {     print(count);   }   // v2   countStream(5).listen((count) {     print(count);   }); }

# 总结

本文介绍了 Dart 语言的核心基础语法,其中面向对象编程,异步编程,工程依赖这些都是后面写Flutter功能开发要具备的基础能力。Dart 语言简洁高效,结合 Flutter 框架可以高效地开发跨平台应用。

在 GitHub 上讨论

欢迎通过 GitHub Issue 留言或反馈。每条讨论都会关联到对应文章的源文件路径。

2025-06-29-Dart-语言入门指南:Flutter开发第一步.md

Related posts