Dart中的库主要有三种:系统库、自定义库、第三方库
1.我们自定义的库
import 'lib/xxx.dart';
2.系统内置库
import 'dart:math';
import 'dart:io';
import 'dart:convert';
3.Pub包管理系统中的库
https://pub.dev/packages
https://pub.flutter-io.cn/packages
https://pub.dartlang.org/flutter/
1、需要在自己想项目根目录新建一个pubspec.yaml
2、在pubspec.yaml文件 然后配置名称 、描述、依赖等信息
3、然后运行 pub get 获取包下载到本地
4、项目中引入库 import 'package:http/http.dart' as http;
5、看文档使用
假如我们需要在A库里使用B库的某些方法,我们需要将B库import
进A库。
import 'B.dart';
import
关键字用于实现相同的目标。dart
文件可以有多个import
语句。
内置Dart
库URI
使用dart:scheme
来引用库。其他库可以使用文件系统路径或package:scheme
来指定其URI
。包管理器(如pub工具
)提供的库使用package:scheme
。
import'package:hello/hello.dart';
Dart提供了额外的机制来控制导入到库内的对象:命名组合器show和hide。
当只需要一个庞大库中某一个或某几个(少数)的对象的时候,可以选择使用show组合器进行导入。
import 'package:math' show Random;
在这行代码中,只导入了math库中的Random对象。
show组合器接收一个命名空间和一个标识符列表,并将标识符列表中出现的对象保留在命名空间。
当在一个库种希望不导入某一个或某几个对象的时候,可以使用hide组合器进行导入。
import 'package:math' hide Random;
这段代码将导入math库但不导入math库种的Random对象。实现方式与show类似。同样也是接收一个命名空间和标识符列表,并将标识符列表中出现的对象从命名空间中丢弃,然后产生一个新的命名空间。
延迟加载,也称为懒加载,可以在需要的时候再进行加载。
懒加载的最大好处是可以减少APP的启动时间。
懒加载使用deferred as关键字来指定,例如:
import 'package:deferred/hello.dart' deferred as hello;
greet() async
{
await hello.loadLibrary();
hello.printGreeting();
}
编号 | 类库 | 说明 |
---|---|---|
1 | dart:io | 服务器应用程序的文件,套接字,HTTP和其他I/O支持。此库在基于浏览器的应用程序中不起作用。默认情况下会导入此库。 |
2 | dart:core | 每个Dart程序的内置类型,集合和其他核心功能。默认情况下会导入此库。 |
3 | dart:math | 数学常数和函数,随机数生成器。 |
4 | dart:convert | 用于在不同数据表示之间进行转换的编码器和解码器,包括JSON和UTF-8。 |
5 | dart:typed_data | 有效处理固定大小数据的列表(例如,无符号8字节整数)。 |
import 'dart:math';
void main()
{
print("Square root of 36 is: ${sqrt(36)}");
// 运行结果:
// Square root of 36 is: 6.0
}
Dart可以使用下划线(_)为标识符添加前缀,以将其组件标记为私有。简而言之,Dart库可以通过外部脚本限制对其内容的访问,称为封装。
library logger_lib;
void log(String msg)
{
print("Log method called in logger_lib msg:$msg");
}
void _log1(String msg)
{
print("Log1 method called in logger_lib msg:$msg");
}
import 'lib/logger_lib.dart' as logLib;
void main()
{
logLib.log("hello dart!"); // Log method called in logger_lib msg:hello dart!
logLib._log1("hello dart!"); // Error: Method not found: '_log1'.
}
要显式声明库,请使用库语句。声明库的语法如下:
library library_name;
可以通过两种方式关联库:
import 'library_name';
import 'dir/library_name';
library logger_lib;
void log(String msg)
{
print("Log msg:$msg");
}
import 'lib/logger_lib.dart';
void main()
{
log("hello dart!"); // Log msg:hello dart!
}
如果导入两个具有冲突标识符的库,则可以为一个或两个库指定前缀。使用as关键字指定前缀。
library logger_lib;
void log(String msg)
{
print("Log method called in logger_lib msg:$msg");
}
library other_logger_lib;
void log(String msg)
{
print("Log method called in other_logger_lib msg:$msg");
}
import 'lib/logger_lib.dart';
import 'lib/other_logger_lib.dart' as other_lib;
void main()
{
log("hello dart!"); // Log method called in logger_lib msg:hello dart!
other_lib.log("hello dart!"); // Log method called in other_logger_lib msg:hello dart!
}
async
和await
这两个关键字的使用只需要记住两点:
1. 只有async方法才能使用await关键字调用方法.
2. 如果调用别的async方法必须使用await关键字.
3. async是让方法变成异步。
4. await是等待异步方法执行完成。
void main() async
{
var result = await testAsync();
print(result); // Hello async
}
// 异步方法
testAsync() async
{
return 'Hello async';
}
part
、part of
有的时候一个库可能太大,不能方便的保存在一个文件当中。Dart
允许我们把一个库拆分成一个或者多个较小的part
组件。或者我们想让某一些库共享它们的私有对象的时候,我们需要使用part
。
library util;
import 'dart:math';
part 'logger.dart';
part 'calculator.dart';
part of util;
void log(String msg)
{
print("Log msg:$msg");
}
part of util;
int add(int firstNumber, int secondNumber)
{
print("inside add method of Calculator Library ") ;
return firstNumber + secondNumber;
}
int modulus(int firstNumber, int secondNumber)
{
print("inside modulus method of Calculator Library ") ;
return firstNumber % secondNumber;
}
int random(int no)
{
return new Random().nextInt(no);
}
import 'lib/util.dart';
void main() async
{
log("hello dart!"); // 调用util中的log方法,结果为:Log msg:hello dart!
print(add(12, 34)); // 调用util中的add方法,结果为:46
}
注意:
1. part各文件是互知存在的,是一个整体,所有对象是共享的(各部分不许重复引入)
2. 实际使用单个方法时必须引入整体的那个模块(本例子中的整体模块为util.dart)
export
多个较小的库组合为一个较大的库或者重新导出库的一部分作为一个新的库
export各文件是互相不可见的,如果在A库中export了B库、C库,A库是包含B、C库的全部的。
library logger;
void log(String msg)
{
print("Log msg:$msg");
}
library calculator.dart;
import 'dart:math';
int add(int firstNumber, int secondNumber)
{
return firstNumber + secondNumber;
}
int modulus(int firstNumber, int secondNumber)
{
return firstNumber % secondNumber;
}
int random(int no)
{
return new Random().nextInt(no);
}
library util;
export 'calculator.dart';
export 'logger.dart';
import 'lib/util.dart';
void main() async
{
log("hello dart!"); // 调用util中的log方法,结果为:Log msg:hello dart!
print(add(12, 34)); // 调用util中的add方法,结果为:46
}