大家如果使用过其他编程语言,对于包(package)管理都不陌生了,我们经常需要导入我们本地的模块,或者导入外部开源的第三方库(或者叫包)。Dart语言中主要通过import指令导入包,下面分别介绍具体的用法。
1.导入内置包
Dart语言内置了一些常用的包,这些内置包随着Dart sdk一起安装在本地。导入内置包使用 dart: 作为路径前缀。
例子
// 导入内置math包,使用dart:作为前缀。
// math包主要提供一些数学相关的函数,例如,正弦函数、求最大值函数等等
import 'dart:math';
void main() {
// 调用math包中的max函数,求两个数中的最大值。
var a = max(1,100);
print(a);
}
2.包的别名
通过上面的例子我们知道,默认情况调用包中的函数或者类,不需要包名作为前缀,上面调用了math包中的max函数,直接使用包中的函数名。但是这样会存在命名冲突的可能性,如果导入的两个包,包含了同名的类或者函数,就会出现命名冲突,因此提供别名机制。
别名例子:
// 使用 as 关键词,指定包的别名
import 'dart:math' as math;
void main() {
// 使用别名,引用包中的函数 。
var a = math.max(1,100);
print(a);
}
提示: 推荐使用别名引用包的成员,不仅可以解决命名冲突问题,也可以增加代码的可读性,我们可以直观知道到底引用的是那个包的成员。
3.导入包的部分内容。
有时候我们不想导入整个包,只想导入包里面的某个类或者某个函数。dart提供了show和hide关键词处理导入包的部分内容。
例子:
// 仅导入max函数, 导入多个内容使用逗号分隔,例如 show max,sin
import 'dart:math' show max;
// 除了max函数,导入math中的所有内容。
import 'dart:math' hide max;
4.导入本地模块
项目开发中自然少不了导入本地的模块,一般项目中会有多个dart脚本文件,每个dart脚本实现不同模块的代码,在需要的时候直接导入dart脚本文件即可。
例子:
本地模块:libs/stack.dart
class Stack<T> {
int _capacity;
int _last;
List<T> _data;
Stack(int cap) : _capacity = cap, _data = List<T>(cap), _last = -1;
// 出栈
T pop() {
if (_last > -1) {
T v = _data[_last];
_last--;
return v;
}
else {
return null;
}
}
// 入栈
bool push(T v) {
if (_last + 1 == _capacity) {
// 超出栈空间容量
return false;
}
_last++;
_data[_last] = v;
}
}
导入本地模块
// 直接通过本地文件路径导入dart脚本
import 'libs/stack.dart';
void main() {
// 引用本地模块定义的类
var s = Stack<int>(10);
}
3.导入第三方开源包
目前大部分开发语言都提供了包管理机制,例如: java的maven, nodejs的npm。dart语言可以使用pub管理第三方包,负责包的下载、更新、包的依赖。
pub命令在安装Dart sdk就已经安装在本地。
使用第三方包的步骤:
- 在项目根目录创建pubspec.yaml包配置文件。
- 配置项目依赖的包和对应的版本。
- 在程序中导入包。
3.1.查找第三方包
https://pub.dev/
这个是pub的中央仓库, 上面有大量的第三方开源包,可以到这里找到自己想要的包。
3.2.配置pub国内镜像代理
直接下载中央仓库的包会很慢,甚至下载失败,可以配置下国内的镜像仓库代理。
linux配置
export PUB_HOSTED_URL=https://pub.flutter-io.cn
windows配置
set PUB_HOSTED_URL=https://pub.flutter-io.cn
其实就是配置PUB_HOSTED_URL环境变量的值,大家可以使用熟悉的方式设置环境变量。
3.3.配置依赖包
在项目根目录创建pubspec.yaml包配置文件。
主要的配置属性为:
- name - 应用名字,或者叫包名我们的程序也算是一个包。
- dependencies - 依赖的包, 格式: 包名: 版本号
例子:
这里配置了两个包intl和http
name: demo
dependencies:
intl: ^0.15.8
http: ^0.12.0+2
关于版本号说明:
- ^1.2.1 代表的更新版本范围为 >=1.2.1 && < 2.0.0
- ^0.2.1 代表的更新版本范围为 >=0.2.1 && < 0.3.0
- ^0.0.2 代表的更新版本范围为 0.0.2(相当于锁定为了0.0.2版本)
3.4.下载依赖包
打包命令行窗口,切换到项目根目录。
输入下面命令:
pub get
3.5.导入第三方开源包
依赖包下载安装后,我们就可以使用import导入第三方包,第三方包前缀为 package:
// 这里导入http包,别名为http
import 'package:http/http.dart' as http;