Dart15库
Dart15库
1.导入和使用库
以下示例导入内置库 dart:math,示例代码是从 math 库中调用 sqrt() 函数,此函数返回传递给它的数字的平方根。
import 'dart:math';
void main() {
print("Square root of 36 is: ${sqrt(36)}");
}
执行上面示例代码,得到以下结果:
Square root of 36 is: 6.0
2.常用库
类库 | 说明 |
---|---|
dart:io | 服务器应用程序的文件,套接字,HTTP和其他I/O支持。此库在基于浏览器的应用程序中不起作用。默认情况下会导入此库。 |
dart:core | 每个Dart程序的内置类型,集合和其他核心功能。默认情况下会导入此库。 |
dart:math | 数学常数和函数,随机数生成器。 |
dart:convert | 用于在不同数据表示之间进行转换的编码器和解码器,包括JSON和UTF-8。 |
dart:typed_data | 有效处理固定大小数据的列表(例如,无符号8字节整数)。 |
3.创建自定义库
Dart还可以将自己的代码用作为库,创建自定义库涉及以下步骤:
- 第1步:声明库
library library_name
// library contents go here
- 第2步:关联库
import 'library_name'
示例
首先,定义一个自定义库 - calculator.dart。
library calculator_lib;
import 'dart:math';
//import statement after the libaray statement
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 'calculator.dart';
void main() {
var num1 = 10;
var num2 = 20;
var sum = add(num1,num2);
var mod = modulus(num1,num2);
var r = random(10);
print("$num1 + $num2 = $sum");
print("$num1 % $num2= $mod");
print("random no $r");
}
执行上面示例代码,得到以下结果
inside add method of Calculator Library
inside modulus method of Calculator Library
10 + 20 = 30
10 % 20= 10
random no 0
4.库前缀
如果导入两个存在冲突标识符的库, 则可以为这两个库,或者其中一个指定前缀。
首先,定义一个库:loggerlib.dart,代码如下所示:
library loggerlib;
void log(msg){
print("Log method called in loggerlib msg:$msg");
}
接下来,将定义另一个库:webloggerlib.dart,代码如下所示:
library webloggerlib;
void log(msg){
print("Log method called in webloggerlib msg:$msg");
}
最后,导入带有前缀的库。
import 'loggerlib.dart';
import 'webloggerlib.dart' as web;
// prefix avoids function name clashes
void main(){
log("hello from loggerlib");
web.log("hello from webloggerlib");
}
执行上面示例代码,得到以下结果:
Log method called in loggerlib msg:hello from loggerlib
Log method called in webloggerlib msg:hello from webloggerlib
5.导入库的一部分
如果你只使用库的一部分功能,则可以选择需要导入的 内容。例如:
// Import only foo.
import 'package:lib1/lib1.dart' show foo;
// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;
6.延迟加载库
Deferred loading (也称之为 lazy loading) 可以让应用在需要的时候再加载库。 下面是一些使用延迟加载库的场景:
- 减少 APP 的启动时间。
- 执行 A/B 测试,例如 尝试各种算法的 不同实现。
- 加载很少使用的功能,例如可选的屏幕和对话框。
要延迟加载一个库,需要先使用 deferred as 来导入:
import 'package:greetings/hello.dart' deferred as hello;
当需要使用的时候,使用库标识符调用 loadLibrary() 函数来加载库:
Future greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
在一个库上你可以多次调用 loadLibrary() 函数。但是该库只是载入一次。
7.第三方库
包是一种封装一组编程单元的机制,应用程序有时可能需要集成某些第三方库或插件。每种语言都有一种机制来管理外部软件包,如Maven或Gradle for Java、npm for Node.js等,Dart 的软件包管理器是 pub。
Pub有助于在存储库中安装包,托管软件包的存储库可以在 https://pub.dartlang.org/ 找到。
包元数据在文件 pubsec.yaml 中定义,每个 Dart 应用程序都有一个 pubspec.yaml 文件,其中包含对其他库的应用程序依赖性以及应用程序的元数据,如应用程序名称、作者、版本和描述。
pubspec.yaml 文件的内容应该如下所示:
name: DartStudy
version: 0.0.1
description: 这是我的第一个dart程序
environment:
sdk: '>=2.10.0 <3.0.0'
dependencies:
http: ^0.13.5
7.1.pub 命令
pub 的一些重要命令如下:
命令 | 描述 |
---|---|
pub get | 获取应用程序所依赖的所有包。 |
pub upgrade | 将所有依赖项升级到较新版本。 |
pub build | 用于构建您的Web应用程序,它将创建一个构建文件夹,其中包含所有相关脚本。 |
pub help | 将提供所有pub命令的帮助。 |
以下示例使用一个http第三方库,请求网络
import 'dart:convert' as convert;
import 'package:http/http.dart' as http;
void main(List<String> arguments) async {
// This example uses the Google Books API to search for books about http.
// https://developers.google.com/books/docs/overview
var url =
Uri.https('www.googleapis.com', '/books/v1/volumes', {'q': '{http}'});
// Await the http get response, then decode the json-formatted response.
var response = await http.get(url);
if (response.statusCode == 200) {
var jsonResponse =
convert.jsonDecode(response.body) as Map<String, dynamic>;
var itemCount = jsonResponse['totalItems'];
print('Number of books about http: $itemCount.');
} else {
print('Request failed with status: ${response.statusCode}.');
}
}
7.2.pubspec.yaml 字段详情
- Name
name 表示的是包的名字,name 必须是全小写,如果有多个词的话,可以用下划线来区分,如:my_app。并且只能使用小写字母和数字的组合,同时不能以数字开头,并且不要使用 dart 中的保留字。
- Version
Version表示的是版本号,版本号是由点分割的三个数字,如:11.15.0. 后面还可以跟上build版本号:+1, +2, +hotfix.oopsie, 或者预发布版本等:-dev.4、-alpha.12、-beta.7、-rc.5。
- Description
package 的描述信息最好使用英文来描写,长度是60 到180个字符,表示这个包的作用。
- Dependencies
有两种依赖信息,一种是所有使用到这个packages的人都需要用到的依赖,这种依赖放在dependencies中。还有一种是只用在当前
pacakge开发中的包,这种依赖放在dev_dependencies中。
在某些情况下,我们有可能需要覆盖某些依赖包,则可以放在:dependency_overrides中。
- environment
因为 Dart 是一门新的语言,所以目前来说其变动还是挺大的。所以有些应用可以依赖于不同的 dart 版本,这时候就需要用到environment:
environment:
sdk: '>=2.10.0 <3.0.0'
上面的代码中,我们指定了dart sdk的版本范围。