码迷,mamicode.com
首页 > 其他好文 > 详细

【dart学习】-- Dart之库的使用

时间:2019-06-13 20:10:30      阅读:380      评论:0      收藏:0      [点我收藏+]

标签:移动   命名空间   div   语言   最低要求   创建   三方   none   就是   

(一)引用库

  通过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库声明了part of A库名称,A库可以省去声明part ‘B库的路径‘
      // 第1个库:
      library testlib1;
      // 可以不写
      part testlib2.dart;

(六)库的自动导入

  • 在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()函数);
      }
    • otherlib.dart库内容为:
      // otherlib库
      library otherlib;
      class otherLib {}
      void test() {
        print(otherLib库 : test()函数);
      }
    • otherlib2.dart库内容为:
      // otherlib2库
      library otherlib2;
      class otherLib2 {}
      void test2() {
        print(otherLib2库 : test2()函数);
      }

(七)库的组成结构

  • 库的最低要求是:pubspec.yaml文件和lib目录。
  • 库的pubspec.yaml文件与普通应用程序包的文件格式相同。
  • lib目录:库代码位于lib 目录下,并且对其他包是公共的。您可以根据需要在lib下创建任何层次结构。
  • 声明一个库的关键字是library。
  • 例如在文件test.dart文件首行加上:library mylib; 表示这个库的名称是mylib




【dart学习】-- Dart之库的使用

标签:移动   命名空间   div   语言   最低要求   创建   三方   none   就是   

原文地址:https://www.cnblogs.com/lxlx1798/p/11018884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!