【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 的基础数据类型和集合类型,如
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
提供了丰富的数学函数和常量,适用于数学运算和几何计算。该库需要手动导入:
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
提供了 jsonEncode
和 jsonDecode
函数,用于将 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
还提供了 base64Encode
和 base64Decode
函数,用于处理 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 的库系统,不仅能提高代码的可维护性,还能
相关文章:
【Flutter】Dart:库
在 Dart 中,库(Library)是组织和重用代码的基本方式。通过库,我们可以将代码分割成模块化的部分,方便管理和共享,同时避免命名冲突。Dart 提供了大量内置库,用于支持常见的功能,比如…...

从0开始深度学习(18)——环境和分布偏移
有时,根据测试集的精度衡量,模型表现得非常出色。 但是当数据分布突然改变时,模型在部署中会出现灾难性的失败。 有时模型的部署本身就是扰乱数据分布的催化剂。 举一个有点荒谬却可能真实存在的例子。 假设我们训练了一个贷款申请人违约风险…...

Java项目-基于springboot框架的线上买菜系统项目实战(附源码+文档)
作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…...
API接口的未来趋势:智能化、自动化与集成化的发展
在当今数字化驱动的世界中,应用程序编程接口(API)已成为连接不同软件、平台和服务的关键桥梁。随着技术的不断进步,API接口的未来趋势将聚焦于智能化、自动化与集成化的发展。本文将深入探讨这些趋势,并分析其在推动数…...

Yolo系列 V1和V2的对比
在计算机视觉领域中,目标检测是一个核心问题,旨在识别图像中所有感兴趣的目标,并给出它们的类别和位置。近年来,随着深度学习技术的发展,目标检测领域取得了巨大的进步。Yolo(You Only Look Once࿰…...

安装vue发生异常: idealTree:nodejs: sill idealTree buildDeps
一、异常 C:\>npm install vue -g npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIREDnpm ERR! request to https://registry.npm.taobao.org/vue failed, reason: certificate has expired 二、原因 请求 https://registry.npm.taobao.org 失败,证…...

SQL基础练习
SQL语句的下载脚本链接!!! 【免费】SQL练习资源-具体练习操作可以查看我发布的文章资源-CSDN文库https://download.csdn.net/download/Z0412_J0103/89908378 1 查看所有数据库 SHOW DATABASES; 结果展示: 2 创建库 方法一&#…...

Python 如何处理大规模数据库表的迁移与数据迁移的高效执行
Python 如何处理大规模数据库表的迁移与数据迁移的高效执行 引言 在现代应用开发中,随着业务需求的增长,数据库表结构和数据往往需要进行迁移和更新。迁移(Migration)是指对数据库表的结构、数据类型、索引、约束等进行修改或更新…...
如何在 MySQL 中处理大量的 DELETE 操作
全文目录: 开篇语前言摘要简介概述DELETE 操作的基本概念常用的 DELETE 方法 核心源码解读简单 DELETE 语句批量 DELETE 示例 案例分析案例1:使用简单 DELETE 删除用户数据案例2:使用分批 DELETE 应用场景演示场景1:用户管理系统场…...

技嘉主板怎么开启TPM_技嘉主板开启TPM2.0教程
在win11最低要求是提示,电脑必须满足 TPM 2.0,并开需要开启TPM 才能正常安装windows11系统,有很多技嘉主板的用户问我,技嘉主板怎么开启tpm功能呢?下面小编就给大家详细介绍一下技嘉主板开启tpm功能的方法。 如何确认你…...
正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 5427(unattended-upgr)持有
这段信息表示你的系统正在等待一个锁文件 (/var/lib/dpkg/lock-frontend) 解除。锁文件用于防止多个进程同时修改系统的包管理器(apt 或 dpkg),避免冲突或损坏系统。 在这种情况下,进程 unattended-upgr(自动升级进程…...
js实现简单的【发布者-订阅者模式】
发布订阅模式是什么 发布订阅模式是一种代码的设计模式,它允许对象间进行松散耦合的通信。 发布者(Publishers)不会直接调用订阅者(Subscribers),相反,它们通过事件通道发布消息;订…...

java学习--集合(大写四.4)
4.collection子接口:List 4.1 List接口存储数据特点 List接口中存储数据的特点:用于存储有序\可以重复的数据. 可以使用List替代数组,动态数组 4.2List接口常用方法 4.2.1、第一波: Collection中声明的15个方法 4.2.2、第二波:因为List是…...

CSS3文本阴影、文本换行、文本溢出、文本修饰、文本描边的使用
1.文本阴影:text-shadow 2.文本换行: white-space:pre(可以理解为按原文显示) white-space:pre-wrap(不会超出父容器) 3.文本溢出 text-overflow:ellipsis一般配合文本…...
Python实现股票自动交易:步骤、要点与注意事项有哪些?
炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…...
闪存----
闪存是一种非易失性存储设备,用于在电子设备中存储数据。使用固态电子存储技术,不含运动部件,因此具有更高的耐久性和更快的访问速度。闪存能够永久的保存数据,即使在断电的情况下也不会丢失。 闪存的速度主要得益于 非机械结构、…...

Spring Boot论坛网站:安全特性与性能优化
4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…...

【MATLAB源码-第261期】基于matlab的帝企鹅优化算法(EPO)机器人栅格路径规划,输出做短路径图和适应度曲线
操作环境: MATLAB 2022a 1、算法描述 帝企鹅优化算法(Emperor Penguin Optimizer,简称EPO)是一种基于自然现象的优化算法,灵感来自于帝企鹅在南极极寒环境中的生活习性。帝企鹅是一种群居动物,生活在极端…...
Spring Boot 核心理解-profile
在 Spring Boot 中,application.properties 和 application.yml 是用来管理应用程序配置的主要文件。为了方便在不同的环境(如 dev、test、prod)下进行配置管理,Spring Boot 提供了 Profile 的概念,这使得我们可以针对…...
docker清理未使用的 Docker 资源
docker system prune --all --forcedocker system prune --all --force 是一个 Docker 命令,用于清理未使用的 Docker 资源。具体含义如下: docker system prune:这个命令会清理所有未使用的 Docker 资源,包括未使用的容器、网络…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...