Dart庫

編程語言中的庫表示例程集合(編程指令集)。Dart有一組內置庫,可用於存儲經常使用的例程。Dart庫包含一組類,常量,函數,typedef,屬性和異常。

導入庫

導入使庫中的組件可用於調用者代碼。import關鍵字用於實現相同的目標。dart檔可以有多個import語句。

內置Dart庫URI使用dart:scheme來引用庫。其他庫可以使用檔系統路徑或package:scheme來指定其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

下麵給出了一些常用的庫 -

編號 類庫 說明
1 dart:io 伺服器應用程式的檔,套接字,HTTP和其他I/O支持。此庫在基於流覽器的應用程式中不起作用。默認情況下會導入此庫。
2 dart:core 每個Dart程式的內置類型,集合和其他核心功能。默認情況下會導入此庫。
3 dart:math 數學常數和函數,亂數生成器。
4 dart:convert 用於在不同數據表示之間進行轉換的編碼器和解碼器,包括JSON和UTF-8。
5 dart:typed_data 有效處理固定大小數據的列表(例如,無符號8位元組整數)。

示例:導入和使用庫

以下示例導入內置庫dart:math。示例代碼是從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:161)
#3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:98)

創建自定義庫

Dart還可以將自己的代碼用作為庫,創建自定義庫涉及以下步驟 -

第1步:聲明庫

要顯式聲明庫,請使用庫語句。聲明庫的語法如下所示 -

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

上一篇: Dart Typedef 下一篇: Dart非同步和非同步