import和liabrary指令可以帮助你创建模块化,可复用的代码。库不仅仅提供API,也是一个私有化单元:库中已下划线(_)开头的类都是对外不可访问的。每个Dart的应用也是一个包,尽管它没有使用包的声明。

库都采用包的形式发布。具体看 Pub Package and Asset Manager

Using libraries 库的使用

使用import关键字引入库中的资源。

下面的例子中,表示了Dart web 应用需要使用dart:html 库

import 'dart:html';

在Dart的内置库中,你可以直接使用dart:schema来引入。其它的库,你可以使用文件路径或者package:scheme方式。其中package:scheme使用的包发布工具发布的代码。

import 'package:test/test.dart';

注意:URI是统一资源标识,URL是URI的一种,

Specifying a library prefix 指定库使用前缀

如果你导入两个库,它们有相同的类,你可以使用其中一个库增加前缀使用标识.·

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2; // Uses Element from lib1.
Element element1 = Element(); // Uses Element from lib2.
lib2.Element element2 = lib2.Element();
Importing only part of a library
If you want to use only part of a library, you can selectively import the library. For example: // Import only foo.
import 'package:lib1/lib1.dart' show foo; // Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;

Lazily loading a library 懒加载

Deferred loading允许应用你在需要时,在后台加载库。下面是需要使用到 deferred的场景

  • 减少APP的启动事件
  • 进行A/B 测试,
  • 用于加载少用的类,可以节省资源,比如可选的界面和弹出框,
import 'package:greetings/hello.dart' deferred as hello;

当你需要用它时,使用loadLibrary().

Future greet() async {
await hello.loadLibrary();
hello.printGreeting();
}

在上面的代码中,await 暂停程序执行,直至包加载完。如果想了解关于 async 和 await更多信息,请看asynchrony support.

你可以多次调用loadLibrary,但是库只会让你加载一次。

如下是deferred使用的一些原则:

  • 不可使用通过deferred导入库的常量,因为它只有在loadLiabary后才创建

  • 不可使用通过deferred导入库的类,可以将类定义为接口通过import导入,具体实现通过deferred导入

  • Dart implicitly inserts loadLibrary() into the namespace that you define using deferred as namespace. The loadLibrary() function returns a Future.(没看太懂,和理解的有冲突)

DartVM 不同:DartVM在loadLibrary之前允许使用库中的变量,但是这种做法不建议使用,可能后期会改变这种机制

Implementing libraries 创建库

详细请看Create Library Packages

9.Libraries and visibility 库和可见性的更多相关文章

  1. Page Visibility API(页面可见性)

    页面可见性: 就是对于用户来说,页面是显示还是隐藏, 所谓显示的页面,就是我们正在看的页面:隐藏的页面,就是我们没有看的页面. 因为,我们一次可以打开好多标签页面来回切换着,始终只有一个页面在我们眼前 ...

  2. HTML5 Page Visibility

    什么是 Page Visibility ? Page Visibility 即页面可见性,通过 visibilityState 的值检测页面当前是否可见.当一个网站是可见或点击选中的状态时 Page ...

  3. 安装numpy库

    1.先安装pip: 下载地址:http://pypi.python.org/pypi/pip#downloads 下载pip-8.1.2.tar.gz(md5,pgp)完成之后,解压到一个文件夹,cm ...

  4. 转一个 Xcode 7 缺少 *.dylib库的解决方法

    Xcode7中 Link Binary With Libraries 没有 .dylib库,只能找到对应的 .tbd,但不能代替使用,通过查找资料,尝试后得到以下两种解决方法. 方法1. (heqin ...

  5. boost库的安装,使用,介绍,库分类

    1)首先去官网下载boost源码安装包:http://www.boost.org/ 选择下载对应的boost源码包.本次下载使用的是 boost_1_60_0.tar.gz (2)解压文件:tar - ...

  6. ios开发问题:添加库和复制其它工程文件编译错误问题

    首先添加库问题: 选择页签Build Phases->Link Binary With Libraries点+添加库 然后command+shift+k清除历史debug的垃圾 复制其它工程文件 ...

  7. 在Linux使用GCC编译C语言共享库

    在Linux使用GCC编译C语言共享库 对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例 ...

  8. iOS 中 .a 和 .framework 静态库的创建与 .bundle 资源包的使用

    iOS 中 .a 和 .framework 静态库的创建与 .bundle 资源包的使用 前言 开发中经常使用三方库去实现某特定功能,而这些三方库通常又分为开源库和闭源库.开源库可以直接拿到源码,和自 ...

  9. CSS(三)背景 list-style display visibility opacity vertical cursor

    背景background 1.background-color:''   背景颜色 2.background-image:'' 背景图片 background-repeat:'' 背景图片是否平铺 取 ...

随机推荐

  1. 工作记录(JS向textarea添加固定内容、通过固定字符将字符串分割为数组)

    第一个是在 textarea 输入框中添加固定的内容. 代码如下: <textarea id="text" cols="30" rows="10 ...

  2. MSCRM中报表开发一:创建基于SQL报表

    1.       新建报表项目.打开SQL Server Business Intelligence Development Studio,点击 文件 > 新建 > 项目,项目类型选择 商 ...

  3. memset初始化数组的问题

    今天才搞清楚,memset用于初始化数组,仅能初始化为0值,而不能初始化一个特定的值,这怎么能模糊了呢??? 因此,如果对申请的一段存放数组的内存进行初始化,每个数组元素均初始化为特定的值,必须使用循 ...

  4. 获取windows鼠标的当前坐标

    #先下载pyautogui库,pip install pyautogui import os,time import pyautogui as pag try: while True: print ( ...

  5. Hive lateral view explode

    select 'hello', x from dual lateral view explode(array(1,2,3,4,5)) vt as x 结果是: hello   1 hello   2 ...

  6. 【three.js练习程序】创建太阳系

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. markdown简单常用语法

    一.标题(符号要和文字之间加上一个字符的空格)# 一级标题## 二级标题### 三级标题#### 四级标题##### 五级标题###### 六级标题二.列表(符号要和文字之间加上一个字符的空格)有序列 ...

  8. oracle 定义临时变量,并使用分支判断

    declare tempCount int; tempID ); begin select count(*) into tempCount from CUSTOMER_PROFILE where id ...

  9. Oracle EBS OPM close batch

    --close_batch --created by jenrry DECLARE x_message_count NUMBER; x_message_list VARCHAR2 (4000); x_ ...

  10. php notes

    1. foreach中的引用 <?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * ...