Dart - 类库(Libraries)

Dart - 类库(Libraries) 首页 / Dart入门教程 / Dart - 类库(Libraries)

 Dart具有一组内置库,这些库对于存储常用的示例程很有用,Dart库由一组类,常量,函数,typedef,属性和异常组成。

导入库

导入使库中的组件可供调用者代码使用, import关键字用于实现相同目的。dart文件可以具有多个import语句。

内置Dart库URI使用dart:方案来引用库。其他库可以使用文件系统路径或package:方案来指定其URI,包管理器(如pub工具)提供的库使用 package:scheme 。

在Dart中导入库的语法如下:

import 'URI'

考虑以下代码片段-

无涯教程网

import 'dart:io' 
import 'package:lib1/libfile.dart' 

如果只想使用一部分库,则可以有选择地导入该库。下面给出了相同的语法-

import 'package: lib1/lib1.dart' show foo, bar;  
//仅导入 foo 和 bar。

import 'package: mylib/mylib.dart' hide foo;  
//导入除 foo 之外的所有名称

下面是一些常用的库-

Sr.NoLibrary & 描述
1

dart:io

服务器应用程序的文件,Socket,HTTP和其他I/O支持,默认情况下,该库是导入的。

2

dart:core

每个Dart程序的内置类型,集合和其他核心函数,该库将自动导入。

3

dart:math

数学常数和函数,以及一个随机数生成器。

4

dart:convert

编码器和解码器,用于在不同的数据表示形式(包括JSON和UTF-8)之间进行转换。

5

dart:typed_data

有效处理固定大小的数据(如,无符号的8字节整数)的列表。

示例  - 导入和使用库

以下示例导入内置库dart:math, 该代码段从数学库调用sqrt()函数, 此函数返回传递给它的数字的平方根。

import 'dart:math'; 
void main() { 
   print("Square root of 36 is: ${sqrt(36)}"); 
}

输出

Square root of 36 is: 6.0

库封装

Dart脚本可以在标识符前面加上下划线(_),以将其组件标签为私有,简而言之,Dart库可以限制外部脚本对其内容的访问,这称为封装。

_identifier

首先,定义一个具有私有函数的库。

library loggerlib;                            
void _log(msg) {
   print("Log method called in loggerlib msg:$msg");      
} 

接下来,导入库

import 'test.dart' as web; 
void main() { 
   web._log("hello from webloggerlib"); 
} 

上面的代码将导致错误。

Unhandled exception: 
No top-level method 'web._log' declared.  
NoSuchMethodError: method not found: 'web._log' 
Receiver: top-level 
Arguments: [...] 
#0 NoSuchMethodError._throwNew (dart:core-patch/errors_patch.dart:184) 
#1 main (file:///C:/Users/Administrator/WebstormProjects/untitled/Assertion.dart:6:3) 
#2 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:261) 
#3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)

创建自定义库

Dart还允许您将自己的代码用作库,创建自定义库涉及以下步骤-

第1步    -  声明一个库

要明确声明一个库,请使用 library语句。声明库的语法如下:

library library_name  
//这里是内容

第2步    -  关联库

您可以通过两种方式关联库-

  • 在同一目录中
import 'library_name'
  • 来自其他目录
import 'dir/library_name'

示例 - 自定义库

首先,让我们定义一个自定义库 calculator.dart 。

library calculator_lib;  
import 'dart:math'; 

//libaray 语句之后的 import 语句
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 

库前缀

如果导入两个标识符冲突的库,则可以为一个或两个库指定一个前缀,使用'as'关键字指定前缀。

import 'library_uri' as prefix

首先,让我们定义一个库: 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 

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

10x程序员工作法 -〔郑晔〕

Web协议详解与抓包实战 -〔陶辉〕

透视HTTP协议 -〔罗剑锋(Chrono)〕

Kafka核心源码解读 -〔胡夕〕

代码之丑 -〔郑晔〕

PyTorch深度学习实战 -〔方远〕

网络排查案例课 -〔杨胜辉〕

林外 · 专利写作第一课 -〔林外〕

快手 · 移动端音视频开发实战 -〔展晓凯〕

好记忆不如烂笔头。留下您的足迹吧 :)