Dart自定義庫、系統庫和第三方庫

/*

前面介紹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();
    }


*/
相關文章
相關標籤/搜索