在 Dart 中,库(Library)是组织和重用代码的基本方式。通过库,我们可以将代码分割成模块化的部分,方便管理和共享,同时避免命名冲突。Dart 提供了大量内置库,用于支持常见的功能,比如数学运算、数据转换、文件读写等。此外,开发者也可以创建自定义库,并在项目中导入和使用。
本教程将详细介绍 Dart 库的相关概念,涵盖库的声明、导入方式、常用核心库、数学库、数据转换库以及输入输出库的使用。
库的声明与导入
库的声明
在 Dart 中,每个 Dart 文件都是一个库。如果要明确声明一个文件为库,可以使用 library
关键字来定义库名称。
dart
library my_library;
void greet() {
print('Hello from my library');
}
在上面的例子中,我们声明了一个名为 my_library
的库。虽然在 Dart 中,声明库的名称并不是强制的,但对于大型项目,这可以帮助我们更清晰地组织代码。
库的导入
Dart 通过 import
关键字来导入其他库中的代码。在 Dart 中,库的导入有几种不同的方式:
-
导入整个库:这是最常见的导入方式,直接将整个库导入到当前文件中。
dartimport 'package:my_library/my_library.dart';
-
导入特定部分 :我们可以选择导入库中的特定部分,而不是整个库。通过
show
关键字可以指定导入的部分。dartimport 'package:my_library/my_library.dart' show greet;
-
隐藏特定部分 :通过
hide
关键字可以隐藏不需要的部分,只导入库中的其他内容。dartimport 'package:my_library/my_library.dart' hide greet;
-
重命名库 :通过
as
关键字,我们可以为库定义一个别名,这样在使用库中的成员时,可以避免命名冲突。dartimport 'package:my_library/my_library.dart' as lib; void main() { lib.greet(); // 使用别名调用库中的方法 }
Dart 核心库
Dart 提供了丰富的 核心库,这些库是 Dart 语言的基础部分,包含了常用的数据类型、集合操作、异步支持等功能。核心库可以直接使用,无需导入。
常用核心库
-
dart:core :这是 Dart 的默认库,包含了 Dart 的基础数据类型和集合类型,如
int
、String
、List
、Map
等。这个库是默认导入的,无需手动导入。 -
dart:async :提供了 Dart 的异步支持,包含
Future
和Stream
等异步编程模型。 -
dart:math :提供了数学运算相关的函数和常量,如
pi
、sqrt
、sin
等。 -
dart:convert:提供了数据转换功能,支持 JSON 编码/解码、Base64 编码等。
-
dart:io:提供了文件和网络 I/O 操作的 API。
数学库 dart:math
Dart 的数学库 dart:math
提供了丰富的数学函数和常量,适用于数学运算和几何计算。该库需要手动导入:
dart
import 'dart:math';
常用数学函数
dart:math
提供了许多常用的数学函数,如:
sqrt(double value)
:计算平方根。pow(num base, num exponent)
:计算幂值。sin(double radians)
:计算弧度的正弦值。cos(double radians)
:计算弧度的余弦值。tan(double radians)
:计算弧度的正切值。
示例:
dart
import 'dart:math';
void main() {
double angle = pi / 4; // 45 度,转换为弧度
print('sin(45°) = ${sin(angle)}');
print('cos(45°) = ${cos(angle)}');
print('sqrt(16) = ${sqrt(16)}');
print('2^3 = ${pow(2, 3)}');
}
输出:
sin(45°) = 0.7071067811865475
cos(45°) = 0.7071067811865475
sqrt(16) = 4.0
2^3 = 8
数据转换库 dart:convert
Dart 提供了 dart:convert
库,用于处理数据的编码和解码,包括常用的 JSON 和 Base64 操作。需要手动导入:
dart
import 'dart:convert';
JSON 编码/解码
JSON 是常见的数据交换格式,dart:convert
提供了 jsonEncode
和 jsonDecode
函数,用于将 Dart 对象转换为 JSON 字符串,以及将 JSON 字符串解析为 Dart 对象。
示例:
dart
import 'dart:convert';
void main() {
// Dart 对象转 JSON
var person = {'name': 'Alice', 'age': 30};
String jsonStr = jsonEncode(person);
print('JSON String: $jsonStr');
// JSON 转 Dart 对象
String jsonString = '{"name": "Bob", "age": 25}';
Map<String, dynamic> user = jsonDecode(jsonString);
print('Dart Map: $user');
}
输出:
JSON String: {"name":"Alice","age":30}
Dart Map: {name: Bob, age: 25}
Base64 编码/解码
dart:convert
还提供了 base64Encode
和 base64Decode
函数,用于处理 Base64 编码和解码。
示例:
dart
import 'dart:convert';
void main() {
String original = 'Hello, Dart!';
String encoded = base64Encode(utf8.encode(original));
print('Base64 Encoded: $encoded');
String decoded = utf8.decode(base64Decode(encoded));
print('Base64 Decoded: $decoded');
}
输出:
Base64 Encoded: SGVsbG8sIERhcnQh
Base64 Decoded: Hello, Dart!
输入输出库 dart:io
dart:io
提供了用于文件操作、标准输入输出、网络通信等的 API。它适用于服务器端或命令行程序,但在浏览器环境中不适用。
文件操作
dart:io
提供了 File
类,用于读写文件。
示例:
dart
import 'dart:io';
void main() async {
// 写入文件
var file = File('example.txt');
await file.writeAsString('Hello, Dart IO!');
// 读取文件
String contents = await file.readAsString();
print('File Contents: $contents');
}
这个示例展示了如何在文件中写入字符串以及从文件中读取内容。
读取标准输入
dart:io
还提供了 stdin
类,用于从控制台读取用户输入。
示例:
dart
import 'dart:io';
void main() {
print('Enter your name:');
String name = stdin.readLineSync()!;
print('Hello, $name!');
}
这个程序将提示用户输入名字,然后输出一个问候语。
自定义库
除了使用 Dart 的内置库,开发者还可以创建自己的库。在 Dart 中,自定义库的创建非常简单,只需将代码模块化并导出需要的部分。
创建库文件
我们可以通过 export
关键字将库的公共部分导出给其他模块使用。例如:
dart
// file: lib/my_library.dart
library my_library;
void greet() {
print('Hello from my library');
}
导入自定义库
一旦定义了自定义库,就可以使用 import
将其引入到其他文件中:
dart
import 'package:my_library/my_library.dart';
void main() {
greet(); // 调用自定义库中的函数
}
总结
Dart 提供了丰富的库系统,允许开发者组织代码、重用功能以及导入内置库或自定义库。通过 Dart 的库,开发者可以轻松访问数学运算、数据转换、输入输出等常见功能模块。掌握 Dart 的库系统,不仅能提高代码的可维护性,还能