【dart学习】-- Dart之库的使用
作者:互联网
(一)引用库
通过import语句在一个库中引用另外一个库的文件。需要注意以下事项
- 在import语句后面需要接上库文件的路径
- 对Dart语言提供的库文件使用dart:xx格式。
- 对第三方提供的库文件使用package:xx格式。
import的例子如下:
import 'dart:io'; import 'package:mylib/mylib.dart'; import 'package:utils/utils.dart'; void main(List<String> args){
}
(二)指定一个库的前缀(as关键词)
当引用的库拥有相互冲突的名字,可以为其中一个或者几个指定不一样的前缀。这与命名空间的概念比较接近
- as关键字给库指定一个前缀:
test2.dart代码
void hello() { print('test2.dart : hello()函数'); }
test3.dart代码如下:
void hello(){ print('test3.dart : hello()函数'); }
现在要在test1.dart中导入这两个文件:
//报错写法: import 'test2.dart'; import 'test3.dart'; //正确写法: import 'test2.dart'; import 'test3.dart' as test3; // 给导入的库指定一个前缀 方便识别
//调用方式:
void main(){
hello();//test2.dart : hello()函数
test3.hello();//test3.dart : hello()函数
}
总结:
test1 与 test3 都拥有hello()函数重复的部分,如果直接引用就不知道具体引用哪一个hello(), 所以代码中用as关键词把 ‘test3.dart’指定成了 test3. 这样就不会冲突了。
库与文件类,在引用时冲突的处理方法,和文件与方法在引用时冲突处理方法抑制。
(三)引用库的一部分(show,hide关键词)
如果只想使用库的一部分,则可以有选择地导入库,可以使用show或者hide关键字。
- show关键词: 表示仅导入当前库,
- hide 关键词:表示除了当前库之外全部导入。
// 仅导入mylib.dart里面的test2函数 import 'libs/mylib1.dart' show test2; // 刚好和show相反 除了test2函数之外 其它的都导入 import 'libs/mylib2.dart' hide test2;
(四)懒加载一个库
延迟加载(也称为延迟加载)
允许应用程序根据需要加载库,如果需要的话。以下是您可能使用延迟加载的一些情况:
- 1).减少应用程序的初始启动时间。
- 2).例如,执行A/B测试 - 尝试算法的替代实现。
- 3).加载很少使用的功能,例如可选的屏幕和对话框。 要延迟加载库,必须先使用
deferred as
它导入一个库。当我们import一个库的时候,如果使用了as 不能同时使用deferred as
例如:
// import 'libs/mylib.dart'; // 不能同时使用 import 'libs/mylib.dart' deferred as tests;
当您需要库时,使用库的标识符调用loadLibrary()。 例如(注意导包:import 'dart:async';)
Future hello() async { await tests.loadLibrary(); tests.test2(); }
// 然后再去使用: void main(){ hello(); // 结果是: mylib.dart:test2()函数 }
在上述的代码中,await关键字暂停执行,直到库被加载。 您可以在一个库上调用loadLibrary()多次,而不会出现问题。该库只加载一次。
使用延迟加载时请记住以下内容:
- 1).延迟库的常量不是导入文件中的常量。请记住,在加载延迟库之前,这些常量不存在。
- 2).您不能在导入文件中使用延迟库中的类型。相反,请考虑将接口类型移动到由延迟库和导入文件导入的*库。
- 3).Dart隐式插入loadLibrary()到你使用deferred as namespace定义的命名空间。loadLibrary()函数返回Future。
(五) 库的拆分
【说明】dart官网不推荐使用part ,这个仅作为了解。 使用part指令,可以将库拆分为多个Dart文件。part of表示隶属于某个库的一部分。
【注意事项】
- 1.不能同时使用library和part of,它们都用于指定属于库的内容。
// library testlib2; 这个不能和part of同时使用 会报错 // part of 表示这个库是testlib库的一部分 part of testlib1;
-
- B库是A库的一部分,在B库里面声明:part of A库名称 例如:在testlib2.dart里面声明
part of testlib1
; 表示testlib2这个库是testlib库的yi部分。 - 如果B库声明A库的一部分,同时A库也想声明它的一部分是B库,正确写法:B库声明part of A库名称,然后A库声明part 'B库的路径' , 同时,如果B库没有声明,那么在A库里面使用part指令会报错。
testlib1.dart内容:
// 第1个库: library testlib1; // 可以不写 part 'testlib2.dart'; void run() { print('testlib1库 : run()函数'); }
testlib2.dart内容:
part of testlib1; class testLib2 {} void start() { print('testlib2库 : start()函数'); }
- B库是A库的一部分,在B库里面声明:part of A库名称 例如:在testlib2.dart里面声明
-
- B库声明了part of A库名称,A库可以省去声明part 'B库的路径'
// 第1个库: library testlib1; // 可以不写 part 'testlib2.dart';
- B库声明了part of A库名称,A库可以省去声明part 'B库的路径'
(六)库的自动导入
- 在A库中使用export关键字引入B库,当我们使用A库的时候,会自动引入B库,也就是说我们导入了A库,就可以使用B库了。
- mylib.dart内容为:
// 这是一个库 命名为mylib library mylib; // 希望使用mylib的时候 自动使用otherlib.dart 可以使用export关键字引入其他库 export 'otherlib.dart'; // 导入otherlib2.dart export 'otherlib2.dart'; class MyLib { void test() { print('mylib.dart: MyLib : test()函数'); } } void test2() { print('mylib.dart: test2()函数'); }
- mylib.dart内容为:
-
- otherlib.dart库内容为:
// otherlib库 library otherlib; class otherLib {} void test() { print('otherLib库 : test()函数'); }
- otherlib.dart库内容为:
-
- otherlib2.dart库内容为:
// otherlib2库 library otherlib2; class otherLib2 {} void test2() { print('otherLib2库 : test2()函数'); }
- otherlib2.dart库内容为:
(七)库的组成结构
- 库的最低要求是:
pubspec.yaml
文件和lib
目录。 - 库的pubspec.yaml文件与普通应用程序包的文件格式相同。
- lib目录:库代码位于lib 目录下,并且对其他包是公共的。您可以根据需要在lib下创建任何层次结构。
- 声明一个库的关键字是library。
- 例如在文件test.dart文件首行加上:library mylib; 表示这个库的名称是mylib
标签:test2,mylib,dart,之库,part,import,Dart,hello 来源: https://www.cnblogs.com/lxlx1798/p/11018884.html