【Flutter 1-14】Flutter手把手教程Dart语言——Dart语言引用、import、package使用

2023-11-01

作者 | 弗拉德
来源 | 弗拉德(公众号:fulade_me)

import 关键字可以帮助你创建一个模块化和可共享的代码库,代码库不仅只是提供 API 而且还起到了封装的作用:以下划线(_)开头的成员仅在代码库中可见。

使用库

使用import来指定命名空间以便其它库可以访问。比如你可以导入代码库 dart:html来使用Dart Web中相关 API:

import 'dart:html';

import的唯一参数是用于指定代码库的URI,对于Dart内置的库,使用 dart:xxxxxx的形式。而对于其它的库,你可以使用一个文件系统路径或者以 package:xxxxxx 的形式。package:xxxxxx 指定的库通过包管理器(比如 pub 工具)来提供:

import 'package:test/test.dart';

指定库前缀

如果你导入的两个代码库有冲突的标识符,你可以为其中一个指定前缀。比如如果 library1library2 都有Element 类,那么可以这么处理:

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
// 使用 lib1 的 Element 类。
Element element1 = Element();
// 使用 lib2 的 Element 类。
lib2.Element element2 = lib2.Element();

导入库的一部分

如果你只想使用代码库中的一部分,你可以有选择地导入代码库。例如:

// 只导入 lib1 中的 foo。(Import only foo).
import 'package:lib1/lib1.dart' show foo;
// 导入 lib2 中除了 foo 外的所有。
import 'package:lib2/lib2.dart' hide foo;

延迟加载库

延迟加载(也常称为懒加载)允许应用在需要时再去加载代码库,下面是可能使用到延迟加载的场景:

  • 为了减少应用的初始化时间。

  • 处理 A/B 测试,比如测试各种算法的不同实现。

  • 加载很少会使用到的功能,比如可选的屏幕和对话框。

使用deferred as关键字来标识需要延时加载的代码库:

import 'package:greetings/hello.dart' deferred as hello;

当实际需要使用到库中API时先调用loadLibrary函数加载库:

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

在前面的代码,使用 await 关键字暂停代码执行直到库加载完成。更多关于 async 和 await 的信息请参考异步支持。
loadLibrary 函数可以调用多次也没关系,代码库只会被加载一次。
当你使用延迟加载的时候需要牢记以下几点:

  • 延迟加载的代码库中的常量需要在代码库被加载的时候才会导入,未加载时是不会导入的。
  • 导入文件的时候无法使用延迟加载库中的类型。如果你需要使用类型,则考虑吧接口类型转移到另一个库中然后让两个库都分别导入这个接口库。
  • Dart会隐式地将loadLibrary方法导入到使用了deferred as命名空间 的类中。loadLibrary函数返回的是一个Future

公众号

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Flutter 1-14】Flutter手把手教程Dart语言——Dart语言引用、import、package使用 的相关文章

随机推荐

  • linux下 source ~/.bashrc文件修改后无效的原因

    linux下通过vim bashrc修改数据比如数据库连接 export CONN STRING postgres username password 127 0 0 1 db sslmode disbale 保存退出后 直接用source
  • GD32上SFUD万能Flash驱动移植

    GD32上SFUD万能Flash驱动移植 移植前提 下载源码 测试效果 移植过程 添加文件到工程目录 keil项目中添加如下文件到工程 设置头文件包含路径 修改sfud port c文件 修改sfud cfg h文件 添加获取初始化状态 可
  • MySQL语句备忘

    MySQL事务随时查看 打开事务随时查看 有效范围当前窗口 SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SQLyog直接点击表在窗口查看即可 比较方便 Navicat需要
  • JavaScript正则表达式

    正则表达式大白话就是一个能判定你的输入内容是否符合设计者规定的一个式子 作用 1 测试字符串是否合规 被用来检测前端输入的字段是否符合要求 常见的场景是注册时输入账号 密码 邮箱等的测试 2 替换某确定的文本 通过js批量替换某个已存在的文
  • R语言学习笔记8

    15 概率 贝叶斯概率 基于当前情形的个人判断使用先验知识来给概率赋值 条件概率 一个事件在另一个发生的事件下发生概率 交集 并集 补集 随机变量 一个偶然的机或者随机出现特定结果的变量 概率分布 将随机变量与定义概率函数相联系是有意义的
  • 头条巨量快手广点通等平台APP&API回传事件注册激活-转化联调-API对接原理代码分析和功能实现

    2022年最新的头条巨量快手广点通等各推广平台APP API回传事件 转化联调注册激活 API对接原理代码分析和功能实现 在商户推广管理当中 经常碰到 需要将用户行为数据回传给推广平台 做转化追踪 事件回传 需要把用户行为数据回传给诸如巨量
  • argsort()函数

    a 6 4 5 b a argsort 1 2 0 意思是 a 1 lt a 2 lt a 0 解释如下 数组a排序后为a1 4 5 6 a argsort返回数组a1中的元素在原数组a中的索引 如何返回数组a中的元素在a1中的索引 2 0
  • LVGL笔记13–lv_led指示灯

    LVGL笔记13 lv led指示灯 LV LED控件就是一个简单的指示灯 在屏幕上绘制一个LED灯样式的图形 这个外形可以通过LV style来修改 通常设置为圆形或小矩形 led灯控件具有0 255级的可调亮度属性 设置为0时代表最暗
  • Python3.11教程4:异常处理

    文章目录 九 异常处理 9 1 异常堆栈跟踪 9 2 异常处理的基本语法 9 3 异常类及异常处理机制 9 4 自定义异常类 9 5 raise触发异常 及其与except的区别 9 6 异常链 9 7 处理多个不相关的异常 9 8 用注释
  • Web目录文件扫描程序(python)

    使用方法 首先找个网站 我们可以看到URL中有php后缀名 说明该网站为php网站 输入参数 URL 文件类型 线程数 即可扫出目录文件 验证一下 访问成功 代码 环境 pycharm python3 9 文件结构 dics文件夹下为各个后
  • 重庆三峡学院计算机英语期末考试,英语语言学试题B卷及答案(重庆三峡学院)

    语言学 英语语言学试题B卷及答案 重庆三峡学院 I Define the following linguistic terms 2 10 20 1 government 2 exocentric construction 3 complem
  • gdb之info/show命令

    一 gdb命令 相对于常见和常用的backtrace break watch step之类的指令来说 这两个都是相对比较小众的功能 只管来说 小众的功能就是使用的人比较少的功能 而使用的比较少的原因也可能是多方面的 一个可能的原因就是大部分
  • 并发程序设计

    ComputeTask h void executeComputeTask ComputeTask c include ComputeTask h include
  • 书摘】程序员成长的10个阶段

    导读 本文节选自机械工业出版社 程序员成长路线图 一书 该书的作者N216 张磊和吉阳一起回忆和总结了自己几十年的程序员成长经历 对当前程序员关心的热点 重点 难点问题给出了自己的看法和建议 通过对程序员的成长阶段进行划分 使得各个阶段的程
  • 什么是Java的跨平台性?原理是什么?

    所谓跨平台性 是指java语言编写的程序 一次编译后 可以在多个系统平台上 运行 实现原理 Java程序是通过java虚拟机在系统平台上运行的 只要该系统可以安 装相应的java虚拟机 该系统就可以运行java程序 机器码再上CPU运行 什
  • 《工程伦理与学术道德》之《工程活动中的环境伦理》

    工程伦理与学术道德 之 工程活动中的环境伦理 工程活动中的环境伦理 4 1 工程活动中环境伦理观念的确立 4 1 1 工业化过程中保护环境的两种思路 4 1 2 工程环境伦理的基本思想 4 1 3 工程环境伦理的核心问题 4 2 工程活动中
  • 22. 面向对象 - 高阶

    Hi 大家好 我是茶桁 之前的课程里面 我们简单的接触了面向对象编程 也和大家讲解了其思想 优缺点 相信上节课程结束之后 大家对面向对象都有了一定的理解 那么我们这节课 就进入面向对象的一些高阶部分 让我们继续来学习一些魔术方法以及Pyth
  • redis mysql_redis和mysql的结合示例

    mysql和redis的区别 mysql是关系型数据库 主要用于存放持久化数据 将数据存储在硬盘中 读取速度较慢 redis是非关系型数据库 即将数据存储在缓存中 缓存的读取速度快 能够大大的提高运行效率 但是保存时间有限 django中使
  • 【python】if __name__==‘__mian__‘ 如何理解,原理及作用

    1 什么是 name 1 为什么使用 name 属性 Python解释器在导入模块时 会将模块中没有缩进的代码全部执行一遍 模块就是一个独立的Python文件 开发人员通常会在模块下方增加一些测试代码 为了避免这些测试代码在模块被导入后执行
  • 【Flutter 1-14】Flutter手把手教程Dart语言——Dart语言引用、import、package使用

    作者 弗拉德 来源 弗拉德 公众号 fulade me 库 import 关键字可以帮助你创建一个模块化和可共享的代码库 代码库不仅只是提供 API 而且还起到了封装的作用 以下划线 开头的成员仅在代码库中可见 使用库 使用import来指