【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 资源,包括未使用的容器、网络…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
