9.Libraries and visibility 库和可见性
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 创建库
9.Libraries and visibility 库和可见性的更多相关文章
- Page Visibility API(页面可见性)
页面可见性: 就是对于用户来说,页面是显示还是隐藏, 所谓显示的页面,就是我们正在看的页面:隐藏的页面,就是我们没有看的页面. 因为,我们一次可以打开好多标签页面来回切换着,始终只有一个页面在我们眼前 ...
- HTML5 Page Visibility
什么是 Page Visibility ? Page Visibility 即页面可见性,通过 visibilityState 的值检测页面当前是否可见.当一个网站是可见或点击选中的状态时 Page ...
- 安装numpy库
1.先安装pip: 下载地址:http://pypi.python.org/pypi/pip#downloads 下载pip-8.1.2.tar.gz(md5,pgp)完成之后,解压到一个文件夹,cm ...
- 转一个 Xcode 7 缺少 *.dylib库的解决方法
Xcode7中 Link Binary With Libraries 没有 .dylib库,只能找到对应的 .tbd,但不能代替使用,通过查找资料,尝试后得到以下两种解决方法. 方法1. (heqin ...
- boost库的安装,使用,介绍,库分类
1)首先去官网下载boost源码安装包:http://www.boost.org/ 选择下载对应的boost源码包.本次下载使用的是 boost_1_60_0.tar.gz (2)解压文件:tar - ...
- ios开发问题:添加库和复制其它工程文件编译错误问题
首先添加库问题: 选择页签Build Phases->Link Binary With Libraries点+添加库 然后command+shift+k清除历史debug的垃圾 复制其它工程文件 ...
- 在Linux使用GCC编译C语言共享库
在Linux使用GCC编译C语言共享库 对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例 ...
- iOS 中 .a 和 .framework 静态库的创建与 .bundle 资源包的使用
iOS 中 .a 和 .framework 静态库的创建与 .bundle 资源包的使用 前言 开发中经常使用三方库去实现某特定功能,而这些三方库通常又分为开源库和闭源库.开源库可以直接拿到源码,和自 ...
- CSS(三)背景 list-style display visibility opacity vertical cursor
背景background 1.background-color:'' 背景颜色 2.background-image:'' 背景图片 background-repeat:'' 背景图片是否平铺 取 ...
随机推荐
- webpack4.0在Mac下的安装配置及踩到的坑
一.什么是webpack是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源.它做的事情是,分析你的项目结构,找到JavaScript模块以 ...
- 转 .md即markdown文件的基本常用编写语法(图文并茂)
原文链接:.md即markdown文件的基本常用编写语法(图文并茂) 序言: 很久没有写博客了,感觉只要是不写博客,人就很变得很懒,学的知识点感觉还是记不住,渐渐地让我明白,看的越多,懂的越少(你这话 ...
- Expo大作战(二十七)--expo sdk api之Util(expo自带工具类),tackSnapshotAsync,Svg,SQLite
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Sql server 索引详解
参考资料:老K写的,http://www.cnblogs.com/AK2012/archive/2013/01/04/2844283.html SQL索引在数据库优化中占有一个非常大的比例, 一个好的 ...
- 使用redis 处理高并发场景
1.原理: 当同一个用户获取锁之后,会让该用户一直持有锁.同样 的用户再次获取,会根据原子性 ,lock返回true. /** * 获取锁(非公平锁), 默认获取超时为2分钟 */ public bo ...
- 用 React 整合 LogEntries JavaScript 库
[编者按]本文作者为 David Posin,主要介绍 React 与 LogEntries 间的相互操作.本文系国内 ITOM 管理平台 OneAPM 编译呈现. 众所周知,React.js已经被证 ...
- Oracle 密码失灵
java.sql.SQLException: ORA-28001: 密碼已經屆滿 at oracle.jdbc.driver.DatabaseError.throwSqlException(Datab ...
- python基础学习3----列表
一.字符格式化输出 占位符 %s s = string 字符串 %d d = digit 整数 %f f = float 浮点数 name = input(&q ...
- firefox(火狐)和Chrome(google)浏览器清空缓存操作的方法指引
摘要说明: 1.系统做升级更新,更新了css和js 2.系统更新有,因为缓存问题,有客户反馈新增功能不能使用 3.所以要清空缓存,提供火狐和谷歌浏览器清空缓存的操作指引 4.附:代码层面的清空缓存方案 ...
- 7zip批量压缩,并批量改.jar
批量压缩.bat--要和将要压缩的文件在同一级目录下 for /d %%X in (*) do "D:\Program Files\7-Zip\7z.exe" a "%% ...