/* 前面介紹Dart基礎知識的時候基本上都是在一個文件裏面編寫Dart代碼的,但實際開發中不可能這麼寫,模塊化很重要,因此這就須要使用到庫的概念。 在Dart中,庫的使用時經過import關鍵字引入的。 library指令能夠建立一個庫,每一個Dart文件都是一個庫,即便沒有使用library指令來指定。 Dart中的庫主要有三種: 一、咱們自定義的庫 import 'lib/xxx.dart'; 二、系統內置庫 import 'dart:math'; import 'dart:io'; import 'dart:convert'; 三、Pub包管理系統中的庫 https://pub.dev/packages https://pub.flutter-io.cn/packages https://pub.dartlang.org/flutter/ 一、須要在本身想項目根目錄新建一個pubspec.yaml 二、在pubspec.yaml文件 而後配置名稱 、描述、依賴等信息 三、而後運行 pub get 獲取包下載到本地 四、項目中引入庫 import 'package:http/http.dart' as http; 看文檔使用 */
導入本地庫php
import 'lib/Animal.dart'; main(){ var a=new Animal('小黑狗', 20); print(a.getName()); }
class Animal{ String _name; //私有屬性 int age; //默認構造函數的簡寫 Animal(this._name,this.age); void printInfo(){ print("${this._name}----${this.age}"); } String getName(){ return this._name; } void _run(){ print('這是一個私有方法'); } execRun(){ this._run(); //類裏面方法的相互調用 } }
導入系統內置的庫java
// import 'dart:io'; import "dart:math"; main(){ print(min(12,23)); print(max(12,25)); }
import 'dart:io'; import 'dart:convert'; void main() async{ var result = await getDataFromZhihuAPI(); print(result); } //api接口: http://news-at.zhihu.com/api/3/stories/latest getDataFromZhihuAPI() async{ //一、建立HttpClient對象 var httpClient = new HttpClient(); //二、建立Uri對象 var uri = new Uri.http('news-at.zhihu.com','/api/3/stories/latest'); //三、發起請求,等待請求 var request = await httpClient.getUrl(uri); //四、關閉請求,等待響應 var response = await request.close(); //五、解碼響應的內容 return await response.transform(utf8.decoder).join(); }
說明:json
/* async和await 這兩個關鍵字的使用只須要記住兩點: 只有async方法才能使用await關鍵字調用方法 若是調用別的async方法必須使用await關鍵字 async是讓方法變成異步。 await是等待異步方法執行完成。 */ void main() async{ var result = await testAsync(); print(result); } //異步方法 testAsync() async{ return 'Hello async'; }
導入第三方庫api
/* pub包管理系統: 一、從下面網址找到要用的庫 https://pub.dev/packages https://pub.flutter-io.cn/packages https://pub.dartlang.org/flutter/ 二、建立一個pubspec.yaml文件,內容以下 name: xxx description: A new flutter module project. dependencies: http: ^0.12.0+2 date_format: ^1.0.6 三、配置dependencies 四、運行pub get 獲取遠程庫 五、看文檔引入庫使用 */ import 'dart:convert' as convert; import 'package:http/http.dart' as http; import 'package:date_format/date_format.dart'; main() async { // var url = "http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=1"; // // Await the http get response, then decode the json-formatted responce. // var response = await http.get(url); // if (response.statusCode == 200) { // var jsonResponse = convert.jsonDecode(response.body); // print(jsonResponse); // } else { // print("Request failed with status: ${response.statusCode}."); // } print(formatDate(DateTime(1989, 2, 21), [yyyy, '*', mm, '*', dd])); }
Dart庫的重命名 Dart衝突解決app
/* 一、衝突解決 當引入兩個庫中有相同名稱標識符的時候,若是是java一般咱們經過寫上完整的包名路徑來指定使用的具體標識符,甚至不用import均可以,可是Dart裏面是必須import的。當衝突的時候,可使用as關鍵字來指定庫的前綴。以下例子所示: import 'package:lib1/lib1.dart'; import 'package:lib2/lib2.dart' as lib2; Element element1 = new Element(); // Uses Element from lib1. lib2.Element element2 = new lib2.Element(); // Uses Element from lib2. */ import 'lib/Person1.dart'; import 'lib/Person2.dart' as lib; main(List<String> args) { Person p1=new Person('張三', 20); p1.printInfo(); lib.Person p2=new lib.Person('李四', 20); p2.printInfo(); }
部分到導入:異步
/* 部分導入 若是隻須要導入庫的一部分,有兩種模式: 模式一:只導入須要的部分,使用show關鍵字,以下例子所示: import 'package:lib1/lib1.dart' show foo; 模式二:隱藏不須要的部分,使用hide關鍵字,以下例子所示: import 'package:lib2/lib2.dart' hide foo; */ // import 'lib/myMath.dart' show getAge; import 'lib/myMath.dart' ; void main(){ getName(); }
延遲加載async
/* 延遲加載 也稱爲懶加載,能夠在須要的時候再進行加載。 懶加載的最大好處是能夠減小APP的啓動時間。 懶加載使用deferred as關鍵字來指定,以下例子所示: import 'package:deferred/hello.dart' deferred as hello; 當須要使用的時候,須要使用loadLibrary()方法來加載: greet() async { await hello.loadLibrary(); hello.printGreeting(); } */