持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情
库
在 Dart 中,通过使用各种库来提高代码的重用性,便捷性,Dart 中的每一个 dart 文件都是一个库,即使没有使用关键字 library
修饰
库的使用
在 Dart 中,使用 import
来导入需要的库
import '库所在的uri';
常见的库有三种不同的形式
-
导入 Dart 内置的库
Dart 标准库都是以
dart
为前缀, 比如dart:io
、dart:html
、dart:math
...import 'dart:html';
-
导入相对路径的库
通常指自己项目中自定义的
dart
文件import 'lib/test/test.dart';
-
导入 pubspec.yaml 包管理工具管理的一些库
在 Dart 中,通过pub.dev 获取三方库的资源,导入三方库通常以
package
为前缀import 'package:flutter/material.dart'; ```
导入库引起的冲突
如果导入的两个库彼此有冲突,可以使用 as
关键字
比如导入的俩个库中都含有 Student 类
import 'package:lib1/Student1.dart';
import 'package:lib2/Student2.dart' as stu2
// 使用 Student1 中的 Student 类
Student stu1 = Student();
// 使用 Student2 中的 Student 类
stu2.Student stu2 = lib2.Student();
导入库文件的显示和隐藏
如果只想使用库中的一部分内容,可以使用关键字 show
和关键字 hide
对内容进行显示和隐藏处理
// 可以显示 Student,屏蔽其他内容
import 'package:lib1/Student1.dart' show Student
// 可以隐藏 Student,显示其他内容
import 'package:lib2/Student2.dart' hide Student
库的懒加载
在 Dart 中,可以根据业务需要对库进行延时加载,也称库的懒加载
使用关键字 deferred as
修饰延时加载库
import 'package:greetings/hello.dart' deferred as hello;
当实际使用库中的 API 时,先调用 loadLibrary
函数加载库
Future<void> greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
使用 await
关键字暂停代码执行直到库加载完。loadLibrary
函数可以调用多次,代码库只会被加载一次
注意:
-
延迟加载的代码库中的常量需要在代码库被加载的时候才会导入,未加载时是不会导入的
-
导入文件的时候无法使用延迟加载库中的类型。如果你需要使用类型,则考虑吧接口类型转移到另一个库中然后让两个库都分别导入这个接口库
-
Dart
会隐式地将loadLibrary
方法导入到使用了deferred as
命名空间 的类中。loadLibrary
函数返回的是一个Future