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