导图社区 Dart中的库
Dart中的库简介,创建以及使用,Dart深入篇,入门Flutter的基础知识。
编辑于2020-04-28 21:34:47Dart中的库、包
常用内置库
dart:core
内置类型,数字,集合,字符串等等
该库会自动导入到每一个dart程序
公共集合方法
isEmpty
isNotEmpty
forEach
map
where
获取有匹配条件的元素
any
部分元素符合条件
every
所有元素符合条件
URI
var uri = Uri.parse('http://example.org:8080/foo/bar#frag'); assert(uri.scheme == 'http'); assert(uri.host == 'example.org'); assert(uri.path == '/foo/bar'); assert(uri.fragment == 'frag'); assert(uri.origin == 'http://example.org:8080');
日期和时间
DateTime.now()
DateTIme(2000) //2000年1月1日
DateTime(2000,1,2) //指定年月日
DateTime.utc(2000) //日期指定为utc
DateTime.fromMillisecondsSinceEpoch //毫秒时间转换
DateTime.parse('2000-01-01T00:00:00Z'); //解析IOS 8601日期
Duration,使用Duration来计算两个日期的差
var y2k = DateTime.utc(2000); // 增加一年。 var y2001 = y2k.add(const Duration(days: 366)); assert(y2001.year == 2001); // 减少30天。 var december2000 = y2001.subtract(const Duration(days: 30)); assert(december2000.year == 2000); assert(december2000.month == 12); // 计算两个时刻之间的查, // 返回 Duration 对象。 var duration = y2001.difference(y2k); assert(duration.inDays == 366); // y2k was a leap year.
Comparable
Iterable
迭代支持 for-in
dart:sync
async
await
future
future-then()
future-then()-catchError() //then()-catchError()是try-catch的一个异步版本
异步链式编程
then()方法返回一个future对象,这样就提供了一个非常好的方式让多一个异步方法按照顺序执行
等待多个future
Future.wait()
await Future.wait([ deleteLotsOfFiles(), copyLotsOfFiles(), checksumLotsOfOtherFiles(), ]); print('Done with all the long steps!');
Stream
Stream两种类型
Single-Subscription 类型的 Stream
Broadcast 类型的 Stream
Stream 用来表示一些列数据。
有时,可以使用异步 for 循环 await for ,来替代 Stream API
使用 await for 或者使用 listen() 方法监听 stream, 来获取
Stream 是一系列异步事件的序列。其类似于一个异步的 Iterable,不同的是当你向 Iterable 获取下一个事件时它会立即给你,但是 Stream 则不会立即给你而是在它准备好时告诉你。
Stream三个构造方法
1. Stream.fromFuture
2. Stream.fromFutures
3. Stream.fromIterable
dart:math
三角函数
最大值,最小值
max,min
随机数
var random = Random();
random.nextDouble(); // Between 0.0 and 1.0: [0, 1)
random.nextInt(10); // Between 0 and 9.
random.nextBool(); // true or false
dart:convert
jsonDecode //解码json编码的字符串为Dart对象
jsonEncode //编码
utf-8
编码 //utf8.encode
解码 //utf8.decoder
创建package
组基本的Library组成
1. pubspec file pubspec 文件
2. lib directory lib 目录
Library 的代码位于 lib 目录下,且对于其他 Package 是公开的。你可以根据需要在 lib 下任意创建组织文件结构
lib/src 目录下的代码被认为是私有的。其他 Package 应该永远不需要导入 src/... 目录下代码。通过导出 lib/src 目录的文件到一个 lib 目录的文件,实现对 lib/src 目录中 API 的公开。
组织Library package
大多数情况下,除非存在两个类紧密耦合的情况,否则每个类都应该将自己视为一个 Mini Library 。
在文件的头部使用 part 命令,能够将一个 Library 分割成多个 Dart 文件。这里,我们建议应该创建 Mini Library ,而避免使用 part 命令。
直接在 lib 目录下创建“主” Library 文件,lib/<package-name>.dart,该文件导出所有的公开的 API,这样就可以允许使用者导入单个文件就能够获得 Library 的所有功能。
在导入 Library 文件时,使用 package: 命令来指定文件的 URI
条件导入或条件导出 Library 文件
export 'src/hw_none.dart' // Stub implementation if (dart.library.io) 'src/hw_io.dart' // dart:io implementation if (dart.library.html) 'src/hw_html.dart'; // dart:html implementation
发布package
发布是永久的
pub publish
哪些文件会被发布?
在你 package 中的 所有文件 都会被包含在发布的 package 中,除了以下几个例外
1. 任何 packages 目录
2. 你的 package 的 lockfile 文件
3. 如果你没有使用 Git,所有的 隐藏 文件(即文件名以 . 开头的那些)
4. 如果你在使用 Git,所有通过 .gitignore 文件所忽略的文件。
如何使用package
Dart 生态系统使用 包 来管理共享软件:比如库和工具
使用pub包管理工具来获取package
Dart 包目录中至少包含一个 pubspec 文件,pubspec 文件记录一些关于包的元数据,此外,包还包含其他依赖项(在 pubspec 中列出), Dart 库,应用,资源,测试,图片等
使用包步骤
1. 创建一个 pubspec
2. 使用 Pub 获取当前所依赖的包
pub get命令确定当前应用所依赖的包,并将它们保存到中央系统缓存
Pub 会创建一个.packages 文件(位于应用程序的根路目录下),该文件将应用程序所依赖的每个包名相应的映射到系统缓存中的包
3. 如果当前 Dart 代码依赖包中的某个库,导入(import)该库
使用 package: 前缀,导入包中的库
Dart 运行时会抓取 package: 之后的内容,并在应用程序的 .packages 文件中查找它。
升级依赖
第一次获取依赖时,Pub 会下载依赖及其兼容的最新版本。然后通过创建 lockfile 锁定依赖,以始终使用这个版本。
Pub 会在 pubspec 旁创建并存储一个名为 pubspec.lock 文件。它列出了使用的每个依赖包的指定版本(当前包或传递包的版本)。
如果已经准备更新依赖到最新版本,使用命令 pub upgrade,该命令重新生成 lockfile 文件,并使用最新可用版本的依赖包
在Flutter中使用package
将 package 依赖添加到应用
1. 添加依赖,打开应用文件夹下的 pubspec.yaml 文件,然后在 pubspec.yaml 下添加
在命令行中运行:flutter pub get
导入
在 Dart 代码中添加相关的 import 语句
如果有必要,停止并重启应用
冲突解决
假设你想在应用中使用 some_package 和 other_package,并且它们依赖于不同版本的 url_launcher。于是我们便有了潜在的冲突。避免这种情况的最好方法是 package 的作者在指定依赖项时使用 版本范围 而非特定版本
dependencies: url_launcher: ^5.4.0 # Good, any 5.4.x version where x >= 0 works. image_picker: '5.4.3' # Not so good, only version 5.4.3 works.
依赖未发布的 package
Path 依赖
dependencies: plugin1: path: ../plugin1/
Git 依赖
dependencies: plugin1: git: url: git://github.com/flutter/plugin1.git