【Flutter】Dart:库

server/2024/10/23 7:08:49/

在 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 对象转 JSONvar 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 的库系统,不仅能提高代码的可维护性,还能


http://www.ppmy.cn/server/134107.html

相关文章

Unable to open nested entry ‘********.jar‘ 问题解决

今天把现网版本的task的jar拖回来然后用7-zip打开拖了一个jar进去替换mysql-connector-java-5.1.47.jar 为 mysql-connector-java-5.1.27.jar 启动微服务的时候就报错下面的 Exception in thread "main" java.lang.IllegalStateException: Failed to get nested ar…

商汤科技十周年公布新战略,将无缝集成算力、模型及应用

10月18日&#xff0c;恰逢商汤科技十周年庆典&#xff0c;“2024商汤十周年国际论坛&#xff1a;迈向AI 2.0共融新时代”在香港科学园成功举办。 据「TMT星球」了解&#xff0c;来自全球的行业领袖、政府代表、AI专家共聚于此&#xff0c;共同探讨AI行业的未来。 活动上&…

【电商项目--大数据治理】

电商项目的大数据治理涉及到数据的采集与存储、数据的加工与分析、数据的可视化与应用等方面。以下是一些开展大数据治理工作的建议&#xff1a; 制定数据治理策略&#xff1a;确定数据治理的目标、原则和流程&#xff0c;明确数据的采集、存储、加工和应用等环节的责任和权限&…

算法:KMP算法详解

朴素的BF算法 BF算法即暴力求解字符串匹配的算法 面对这样两个字符串&#xff0c; BF算法就是用两个指针&#xff0c;一个i&#xff0c;一个j&#xff0c;分别从s和t的开始位置开始依次匹配 当遇到s[i] t[0]的时候&#xff0c;此时有可能字符串匹配&#xff0c;需要进行检查…

线性可分支持向量机的原理推导 9-32线性分类超平面的位置 公式解析

本文是将文章《线性可分支持向量机的原理推导》中的公式单独拿出来做一个详细的解析&#xff0c;便于初学者更好的理解。 公式 9-32 是线性可分支持向量机&#xff08;SVM&#xff09;中的一个关键公式&#xff0c;用于表达线性分类超平面的位置。通过这个公式&#xff0c;我们…

Scrapy | Scrapy框架中管道的使用

管道的使用 基本使用如何在管道中区分不同的爬虫 在Scrapy中&#xff0c;爬虫管道&#xff08;Item Pipeline&#xff09;是用于处理Spider提取的数据的一系列组件。它们的主要职责是清洗、验证和存储爬取的数据。每个管道组件是一个Python类&#xff0c;这些类必须定义一个pro…

黑盒测试和白盒测试的具体方法(附加实际应用中的技巧和注意事项)

黑盒测试的具体方法 黑盒测试有多种具体的方法&#xff0c;以下是几种常见的黑盒测试技术&#xff1a; 等价类划分 定义&#xff1a;将输入数据划分为若干等价类&#xff0c;每个等价类中的数据被认为是等效的。目的&#xff1a;减少测试用例数量&#xff0c;同时覆盖所有可…

QT的文件操作类 QFile

QFile 是 Qt 框架中用于文件处理的一个类。它提供了读取和写入文件的功能&#xff0c;支持文本和二进制文 件。 QFile 继承自 QIODevice &#xff0c;因此它可以像其他IO设备一样使用。 主要功能 文件读写&#xff1a; QFile 支持打开文件进行读取或写入操作文件信息&#x…