【Flutter】Dart:库

news/2024/10/20 16:16:06/

在 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/news/1540562.html

相关文章

pandas-使用技巧

pandas-使用技巧 简单技巧 仅个人笔记使用&#xff0c;感谢点赞关注 简单技巧 pd.to_dict()&#xff1a;Dataframe格式数据转字典数据pd.dropna()&#xff1a;去nan值& | ~&#xff1a;pd逻辑运算符pd.isnan()&#xff1a;判断是否为nan值pd.concat&#xff1a;多个pd拼接…

CR6609 刷机

如果要刷openwrt&#xff0c;必须用pb-boot&#xff0c;如果用breed&#xff0c;会进不了系统。 刷了breed的话&#xff0c;可以在breed改刷pb-boot&#xff0c;在bootloader那里选择pb-boot的固件上传更新即可 而用pb-boot的话&#xff0c;也可以很方便的刷回breed&#xff…

深入解析JavaScript中的箭头函数及其在React中的应用(箭头函数与传统函数的区别、如何在不同上下文中使用箭头函数)

文章目录 1. 引言2. 箭头函数的定义与用法3. 箭头函数与传统函数的区别3.1 this绑定3.2 不能作为构造函数3.3 arguments对象 4. 如何在不同上下文中使用箭头函数4.1 在类方法中使用箭头函数4.2 在回调函数中使用箭头函数 5. 深入探讨箭头函数在React中的应用5.1 在事件处理器中…

网站cms系统 开源cms建站系统

在数字化时代&#xff0c;企业对于快速、灵活且成本效益高的网站构建方案的需求日益增长。开源CMS&#xff08;内容管理系统&#xff09;建站系统因其灵活性、可定制性和强大的社区支持而成为众多企业和开发者的首选。本文将探讨开源CMS系统的优势、功能、应用案例以及如何选择…

3D 数字人与 2D 数字人的区别

3D 数字人是通过计算机图形技术、建模技术等手段创建出的具有三维立体形态的虚拟人物形象。其创建过程较为复杂&#xff0c;通常包括以下步骤&#xff1a; **1、建模&#xff1a;**利用专业的三维建模软件&#xff0c;根据设定的人物形象、特征等进行精细的建模&#xff0c;构建…

数据结构编程实践20讲(Python版)—15完全图

本文目录 15 完全图(Complete Graph)S1 说明特点可以解决的问题S2 示例S3 问题1:旅行商问题(TSP)S4 问题2:任务分配问题往期链接 01 数组02 链表03 栈04 队列05 二叉树06 二叉搜索树07 AVL树08 红黑树09 B树10 B+树11 线段树12 树状数组13 图形数据结构14 邻接矩阵15 完全…

开发工具(上)

前面我们在Linux部分了解文件权限&#xff0c;和基本指令的内容&#xff0c;但对于开发工具还是没有很多的接触&#xff0c;现在这一篇就是主要讲基础的工具&#xff1b;如yum&#xff0c;yum源&#xff0c;包管理器等等&#xff1b; Linux中的安装软件&#xff1a; 源码安装 …

ARM/Linux嵌入式面经(四七):华为

1. 自我介绍: 请简要介绍一下自己,包括教育背景、专业技能和工作经验。回答: 您好,我叫XXX,毕业于XXX大学电子工程专业,获得学士学位。在校期间,我深入学习了嵌入式系统原理、微处理器架构、C/C++编程语言以及数字电路与模拟电路等核心课程,并通过多个项目实践,积累了…