在 Dart 中,每一個 *.dart 的檔案,都可以被其他檔案匯入 (import) 進來。無論是自己寫的程式碼,還是第三方的程式庫,都可以用關鍵字 import
來匯入。
root directory --- lib --- lib_workshop.dart
|
-- pubspec.yaml
lib
目錄底下,如範例中的 lib_workshop.dart。放在該目錄中,就可以被使用關鍵字 import
匯入使用。例如:
import 'package:[packagename]/lib_workshop.dart';
pubspec.yaml
是用來定義程式相關的設定,是 YAML 的格式,需注意空格。範例如下:
name: lib_workshop
description: A starting point for Dart libraries or applications.
# version: 1.0.0
# homepage: https://www.example.com
environment:
sdk: '>=2.8.1 <3.0.0'
#dependencies:
# path: ^1.7.0
dev_dependencies:
pedantic: ^1.9.0
test: ^1.14.4
參考:https://dart.dev/tools/pub/pubspec
將上方的架構修改為
root directory --- lib --- lib_workshop.dart
| |
| -- src --- lib_workshop_base.dart
|
-- pubspec.yaml
|
-- example --- lib_workshop_example.dart
在 lib 目錄下,建立我們需要的檔案結構,例如 lib\src
。
class Sample {
bool get isGood => true;
}
export
將其他的程式庫包含在此檔案裡面。export lib_workshop_base.dart;
我們在 example\lib_workshop_example.dart
檔案中可以用將 lib_workshop.dart
匯入,就會連 lib_workshop_base.dart
一起匯入進來。
若在 lib
資料夾裡面有很多程式庫,那麼外面要匯入時,就只需要匯入一隻檔案,在這隻 *.dart
檔案中用關鍵字 export
包含在內的檔案就可以一併匯入,減少 import 的使用數量,也可以將程式庫做一個整理。
除了我們自己寫的程式庫外,外部的程式庫也可以使用 import
匯入。
例如:為了在 lib_workshop_example.dart
處理 JSON 我們可以用 import
匯入 'dart:convert';
import 'dart:convert';
void main() {
var json = {
'name':'foo',
'value':'bar'
};
var jsonMap = jsonEncode(json);
print(json['name']);
}
//foo
若在 src
底下新增一個程式庫 (lib_workshop_base2.dart)
root directory --- lib --- lib_workshop.dart
| |
| -- src --- lib_workshop_base.dart
| |_ lib_workshop_base2.dart
|
-- pubspec.yaml
|
-- example --- lib_workshop_example.dart
//lib_workshop_base2.dart
class Sample {
bool get isGood => false;
}
我們嘗試在 lib_workshop.dart export
lib_workshop_base2.dart
export lib_workshop_base.dart;
export lib_workshop_base2.dart; //Compiliation-error
export
包含的程式庫裡,若有包含相同的類別名稱,會出現編譯錯誤,必須要將該 export
移除,或將同名的類別更名。若直接在 lib_workshop_example.dart
import
呢?
import 'package:dart_3/dart_2.dart';
import 'package:dart_3/src/dart_2_base_2.dart';
void main() {
var sample = Sample(); //Compiliation-error
print('sample: ${sample.isGood}');
}
as
將 import
的程式庫加上前綴字,如此就可以使用前綴字加上類別名稱,避免衝突。import 'package:dart_3/dart_2.dart';
import 'package:dart_3/src/dart_2_base_2.dart' as sample2;
void main() {
var sample = Sample();
print('sample: ${sample.isGood}');
var sample2 = sample2.Sample();
print('sample2: ${sample2.isGood}');
}
//sample: true
//sample2: false
在 Dart 中,每一個 *.dart 的檔案,並不一定包含一個類別,可能有多個組成。
例如:在 lib_workshop_base.dart 中,除了 Sample 類別外,還有一個類別名為 Hello
//lib_workshop_base.dart
class Sample {
bool get isGood => true;
}
class Hello{
void greeting(){
print('Hello');
}
}
若在其他的程式庫匯入 lib_workshop_base.dart
則兩個類別都能使用。
import 'package:[package_name]/srclib_workshop_base.dart'
void main{
var sample = Sample();
var hello = Hello();
}
hide
:將不需要被匯入的類別隱藏起來。import 'package:[package_name]/srclib_workshop_base.dart' hide Hello
void main{
var sample = Sample();
var hello = Hello(); //Compiliation-error
}
show
:只顯示某類別。import 'package:[package_name]/src/lib_workshop_base.dart' show Hello
void main{
var sample = Sample(); //Compiliation-error
var hello = Hello();
}
當我們在 lib 資料夾中建立好我們的檔案之後,其他的程式碼就可以使用 import
來將類別匯入,如此,我們就可以在不同的檔案中沿用相同的類別,達到共用程式碼,以消除重複。
除了匯入自身的程式之外,還可以透過 pubspec.yaml
來加入外部的 package,接者同樣使用 import
來將 package 匯入。
若是同一個類別有很多檔案,我們可以新增一個檔案,該檔案專門使用 export
將相關類別的檔案包含在內,外部要使用則只需要 import
一個檔案即可。
用 import
匯入函式庫時,若我們不想要將該檔案中所有類別皆匯入,我們可以使用 hide
或是 show
來將不需匯入的類別排除。
最後,如果同一檔案匯入的檔案中有相同的類別名稱,可以使用 as
來將該類別加上前綴字,避免類別名稱衝突的情況發生。