📅  最后修改于: 2020-11-05 04:26:04             🧑  作者: Mango
编程语言中的库表示例程(编程指令集)的集合。 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;
// Import only foo and bar.
import 'package: mylib/mylib.dart' hide foo;
// Import all names except foo
下面是一些常用的库-
Sr.No | Library & Description |
---|---|
1 |
dart:io File, socket, HTTP, and other I/O support for server applications. This library does not work in browser-based applications. This library is imported by default. |
2 |
dart:core Built-in types, collections, and other core functionality for every Dart program. This library is automatically imported. |
3 |
dart: math Mathematical constants and functions, plus a random number generator. |
4 |
dart: convert Encoders and decoders for converting between different data representations, including JSON and UTF-8. |
5 |
dart: typed_data Lists that efficiently handle fixed sized data (for example, unsigned 8 byte integers). |
以下示例导入内置库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. (dart:isolate-patch/isolate_patch.dart:261)
#3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)
Dart还允许您将自己的代码用作库。创建自定义库涉及以下步骤-
第1步:声明一个库
要显式声明一个库,请使用library语句。声明库的语法如下:
library library_name
// library contents go here
步骤2:关联图书馆
您可以通过两种方式关联库-
import 'library_name'
import 'dir/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
如果导入两个标识符冲突的库,则可以为一个或两个库指定一个前缀。使用‘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