在Dart中,你可以導(dǎo)入一個庫來使用它所提供的功能。
庫的使用可以使代碼的重用性得到提高,并且可以更好的組合代碼。
Dart中任何一個dart文件都是一個庫,即使你沒有用關(guān)鍵字library聲明
庫的導(dǎo)入
import語句用來導(dǎo)入一個庫,后面跟一個字符串形式的Uri來指定表示要引用的庫,語法如下:
import '庫所在的uri';
常見的庫URI有三種不同的形式
- 來自dart標(biāo)準(zhǔn)版,比如dart:io、dart:html、dart:math、dart:core(但是這個可以省略)
//dart:前綴表示Dart的標(biāo)準(zhǔn)庫,如dart:io、dart:html、dart:math
import 'dart:io';
- 使用相對路徑導(dǎo)入的庫,通常指自己項目中定義的其他dart文件
//當(dāng)然,你也可以用相對路徑或絕對路徑的dart文件來引用
import 'lib/student/student.dart';
- Pub包管理工具管理的一些庫,包括自己的配置以及一些第三方的庫,通常使用前綴package
//Pub包管理系統(tǒng)中有很多功能強(qiáng)大、實用的庫,可以使用前綴 package:
import 'package:flutter/material.dart';
庫文件中內(nèi)容的顯示和隱藏
如果希望只導(dǎo)入庫中某些內(nèi)容,或者刻意隱藏庫里面某些內(nèi)容,可以使用show和hide關(guān)鍵字
- show關(guān)鍵字:可以顯示某個成員(屏蔽其他)
- hide關(guān)鍵字:可以隱藏某個成員(顯示其他)
import 'lib/student/student.dart' show Student, Person;
import 'lib/student/student.dart' hide Person;
庫中內(nèi)容和當(dāng)前文件中的名字沖突
當(dāng)各個庫有命名沖突的時候,可以使用as關(guān)鍵字來使用命名空間
import 'lib/student/student.dart' as Stu;
Stu.Student s = new Stu.Student();
庫的定義
library關(guān)鍵字
通常在定義庫時,我們可以使用library關(guān)鍵字給庫起一個名字。
但目前我發(fā)現(xiàn),庫的名字并不影響導(dǎo)入,因為import語句用的是字符串URI
library math;
part關(guān)鍵字
在開發(fā)中,如果一個庫文件太大,將所有內(nèi)容保存到一個文件夾是不太合理的,我們有可能希望將這個庫進(jìn)行拆分,這個時候就可以使用part關(guān)鍵字了
不過官方已經(jīng)不建議使用這種方式了:官方推薦使用小的文件庫
mathUtils.dart文件
part of "utils.dart";
int sum(int num1, int num2) {
return num1 + num2;
}
dateUtils.dart文件
part of "utils.dart";
String dateFormat(DateTime date) {
return "2020-12-12";
}
utils.dart文件
part "mathUtils.dart";
part "dateUtils.dart";
test_libary.dart文件
import "lib/utils.dart";
main(List<String> args) {
print(sum(10, 20));
print(dateFormat(DateTime.now()));
}
export關(guān)鍵字
官方不推薦使用part關(guān)鍵字,那如果庫非常大,如何進(jìn)行管理呢?
將每一個dart文件作為庫文件,使用export關(guān)鍵字在某個庫文件中單獨導(dǎo)入
mathUtils.dart文件
int sum(int num1, int num2) {
return num1 + num2;
}
dateUtils.dart文件
String dateFormat(DateTime date) {
return "2020-12-12";
}
utils.dart文件
library utils;
export "mathUtils.dart";
export "dateUtils.dart";
test_libary.dart文件
import "lib/utils.dart";
main(List<String> args) {
print(sum(10, 20));
print(dateFormat(DateTime.now()));
}