Bootstrap

【Flutter】Dart:库

在 Dart 中,(Library)是组织和重用代码的基本方式。通过库,我们可以将代码分割成模块化的部分,方便管理和共享,同时避免命名冲突。Dart 提供了大量内置库,用于支持常见的功能,比如数学运算、数据转换、文件读写等。此外,开发者也可以创建自定义库,并在项目中导入和使用。

本教程将详细介绍 Dart 库的相关概念,涵盖库的声明、导入方式、常用核心库、数学库、数据转换库以及输入输出库的使用。

库的声明与导入

库的声明

在 Dart 中,每个 Dart 文件都是一个库。如果要明确声明一个文件为库,可以使用 library 关键字来定义库名称。

library my_library;

void greet() {
  print('Hello from my library');
}

在上面的例子中,我们声明了一个名为 my_library 的库。虽然在 Dart 中,声明库的名称并不是强制的,但对于大型项目,这可以帮助我们更清晰地组织代码。

库的导入

Dart 通过 import 关键字来导入其他库中的代码。在 Dart 中,库的导入有几种不同的方式:

  • 导入整个库:这是最常见的导入方式,直接将整个库导入到当前文件中。

    import 'package:my_library/my_library.dart';
    
  • 导入特定部分:我们可以选择导入库中的特定部分,而不是整个库。通过 show 关键字可以指定导入的部分。

    import 'package:my_library/my_library.dart' show greet;
    
  • 隐藏特定部分:通过 hide 关键字可以隐藏不需要的部分,只导入库中的其他内容。

    import 'package:my_library/my_library.dart' hide greet;
    
  • 重命名库:通过 as 关键字,我们可以为库定义一个别名,这样在使用库中的成员时,可以避免命名冲突。

    import 'package:my_library/my_library.dart' as lib;
    
    void main() {
      lib.greet();  // 使用别名调用库中的方法
    }
    

Dart 核心库

Dart 提供了丰富的 核心库,这些库是 Dart 语言的基础部分,包含了常用的数据类型、集合操作、异步支持等功能。核心库可以直接使用,无需导入。

常用核心库

  • dart:core:这是 Dart 的默认库,包含了 Dart 的基础数据类型和集合类型,如 intStringListMap 等。这个库是默认导入的,无需手动导入。

  • dart:async:提供了 Dart 的异步支持,包含 FutureStream 等异步编程模型。

  • dart:math:提供了数学运算相关的函数和常量,如 pisqrtsin 等。

  • dart:convert:提供了数据转换功能,支持 JSON 编码/解码、Base64 编码等。

  • dart:io:提供了文件和网络 I/O 操作的 API。

数学库 dart:math

Dart 的数学库 dart:math 提供了丰富的数学函数和常量,适用于数学运算和几何计算。该库需要手动导入:

import 'dart:math';

常用数学函数

dart:math 提供了许多常用的数学函数,如:

  • sqrt(double value):计算平方根。
  • pow(num base, num exponent):计算幂值。
  • sin(double radians):计算弧度的正弦值。
  • cos(double radians):计算弧度的余弦值。
  • tan(double radians):计算弧度的正切值。

示例:

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 操作。需要手动导入:

import 'dart:convert';

JSON 编码/解码

JSON 是常见的数据交换格式,dart:convert 提供了 jsonEncodejsonDecode 函数,用于将 Dart 对象转换为 JSON 字符串,以及将 JSON 字符串解析为 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 还提供了 base64Encodebase64Decode 函数,用于处理 Base64 编码和解码。

示例:

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 类,用于读写文件。

示例:

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 类,用于从控制台读取用户输入。

示例:

import 'dart:io';

void main() {
  print('Enter your name:');
  String name = stdin.readLineSync()!;
  print('Hello, $name!');
}

这个程序将提示用户输入名字,然后输出一个问候语。

自定义库

除了使用 Dart 的内置库,开发者还可以创建自己的库。在 Dart 中,自定义库的创建非常简单,只需将代码模块化并导出需要的部分。

创建库文件

我们可以通过 export 关键字将库的公共部分导出给其他模块使用。例如:

// file: lib/my_library.dart
library my_library;

void greet() {
  print('Hello from my library');
}

导入自定义库

一旦定义了自定义库,就可以使用 import 将其引入到其他文件中:

import 'package:my_library/my_library.dart';

void main() {
  greet();  // 调用自定义库中的函数
}

总结

Dart 提供了丰富的库系统,允许开发者组织代码、重用功能以及导入内置库或自定义库。通过 Dart 的库,开发者可以轻松访问数学运算、数据转换、输入输出等常见功能模块。掌握 Dart 的库系统,不仅能提高代码的可维护性,还能

;