在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

https://pub.dev/

  • 要在项目根目录新建pubspec.yaml文件

    1. name: ws
    2. environment:
    3. sdk: '>=2.10.0 <3.0.0'
  • 命令行添加第三方包: dart pub add http, 文件pubspec.yaml会自动改变

    1. name: ws
    2. environment:
    3. sdk: '>=2.10.0 <3.0.0'
    4. dependencies:
    5. http: ^0.13.4
  • 导包并调用 ```dart import ‘package:http/http.dart’ as http;

void main(List args) async { var url = Uri.parse(‘https://example.com/whatsit/create‘); var response = await http.post(url, body: {‘name’: ‘doodle’, ‘color’: ‘blue’}); print(‘Response status: ${response.statusCode}’); print(‘Response body: ${response.body}’);

print(await http.read(Uri.parse(‘https://example.com/foobar.txt‘))); }

  1. <a name="dKohL"></a>
  2. ### 3) 自定义库
  3. - 使用相对路径导入的库,通常指自己项目中定义的其他dart文件
  4. ![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)
  5. <a name="D4MTM"></a>
  6. ## (2) 库文件中内容的显示和隐藏
  7. 如果希望只导入库中某些内容,或者刻意隐藏库里面某些内容,可以使用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)
  8. <a name="Qpwlv"></a>
  9. ## (3) 库中内容和当前文件中的名字冲突
  10. 当各个库有命名冲突的时候,可以使用as关键字来使用命名空间
  11. ```dart
  12. import 'lib/student/student.dart' as Stu;
  13. Stu.Student s = new Stu.Student();

2 大项目库管理方式

(1) library关键字(没用)

通常在定义库时,我们可以使用library关键字给库起一个名字。
但目前我发现,库的名字并不影响导入,因为import语句用的是字符串URI
library math;

(2) part关键字(没用)

官方已经不建议使用这种方式了

(3) export关键字

官方不推荐使用part关键字,那如果库非常大,如何进行管理呢?
将每一个dart文件作为库文件,使用export关键字在某个库文件中单独导入

  1. // utils/mathUtils.dart文件
  2. int sum(int num1, int num2) { return num1 + num2;}
  1. // utils/dateUtils.dart文件
  2. String dateFormat(DateTime date) { return "2020-12-12";}
  1. // utils/utils.dart文件
  2. export "mathUtils.dart";
  3. export "dateUtils.dart";
  1. // main.dart文件
  2. import "lib/utils.dart";
  3. main(List<String> args) { print(sum(10, 20)); print(dateFormat(DateTime.now()));}