在Dart中,你可以导入一个库来使用它所提供的功能。
库的使用可以使代码的重用性得到提高,并且可以更好的组合代码。
Dart中任何一个dart文件都是一个库,即使你没有用关键字library声明
1 库的导入
import语句用来导入一个库,后面跟一个字符串形式的Uri来指定表示要引用的库,语法如下:
import ‘库所在的uri’;
(1) 常见的库URI有三种不同的形式
1) dart标准库
- 比如dart:io、dart:html、dart:math、dart:core(但是这个可以省略)
dart:前缀表示Dart的标准库,如dart:io、dart:html、dart:math import ‘dart:io’;
2) 第三方库
- Pub包管理工具管理的一些库,包括自己的配置以及一些第三方的库,通常使用前缀package
要在项目根目录新建pubspec.yaml文件
name: ws
environment:
sdk: '>=2.10.0 <3.0.0'
命令行添加第三方包: dart pub add http, 文件pubspec.yaml会自动改变
name: ws
environment:
sdk: '>=2.10.0 <3.0.0'
dependencies:
http: ^0.13.4
导包并调用 ```dart import ‘package:http/http.dart’ as http;
void main(List
print(await http.read(Uri.parse(‘https://example.com/foobar.txt‘))); }
<a name="dKohL"></a>
### 3) 自定义库
- 使用相对路径导入的库,通常指自己项目中定义的其他dart文件
![image.png](https://cdn.nlark.com/yuque/0/2022/png/1114755/1643335803309-0a419f3e-69c9-41cf-876f-c0e0757ad946.png#clientId=uf9363a45-3b96-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=209&id=PWfPm&margin=%5Bobject%20Object%5D&name=image.png&originHeight=209&originWidth=465&originalType=binary&ratio=1&rotation=0&showTitle=false&size=15290&status=done&style=none&taskId=ua6a446b9-38b9-4a8d-b614-b3eecd832c7&title=&width=465)
<a name="D4MTM"></a>
## (2) 库文件中内容的显示和隐藏
如果希望只导入库中某些内容,或者刻意隐藏库里面某些内容,可以使用show和hide关键字<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/1114755/1643336495759-33c0d4da-dcc4-4df7-8215-89deaca40baa.png#clientId=uf9363a45-3b96-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=234&id=u2a62da91&margin=%5Bobject%20Object%5D&name=image.png&originHeight=234&originWidth=562&originalType=binary&ratio=1&rotation=0&showTitle=false&size=129560&status=done&style=none&taskId=u49cf94c1-cb32-4147-bb31-17d28f9ae27&title=&width=562)
<a name="Qpwlv"></a>
## (3) 库中内容和当前文件中的名字冲突
当各个库有命名冲突的时候,可以使用as关键字来使用命名空间
```dart
import 'lib/student/student.dart' as Stu;
Stu.Student s = new Stu.Student();
2 大项目库管理方式
(1) library关键字(没用)
通常在定义库时,我们可以使用library关键字给库起一个名字。
但目前我发现,库的名字并不影响导入,因为import语句用的是字符串URI
library math;
(2) part关键字(没用)
官方已经不建议使用这种方式了
(3) export关键字
官方不推荐使用part关键字,那如果库非常大,如何进行管理呢?
将每一个dart文件作为库文件,使用export关键字在某个库文件中单独导入
// utils/mathUtils.dart文件
int sum(int num1, int num2) { return num1 + num2;}
// utils/dateUtils.dart文件
String dateFormat(DateTime date) { return "2020-12-12";}
// utils/utils.dart文件
export "mathUtils.dart";
export "dateUtils.dart";
// main.dart文件
import "lib/utils.dart";
main(List<String> args) { print(sum(10, 20)); print(dateFormat(DateTime.now()));}