文章目錄
-
- 一丶 庫
- 二丶 導入自己本地庫
- 三丶 導入系統内置庫 math庫
- 四丶 導入系統内置庫實作請求資料httpClient
- 五丶 關于 Async Await
- 六丶 導入Pub包管理系統中的庫
- 七丶 庫的重命名 Dart沖突解決
- 八丶 部分導入
- 九丶 延遲加載
前面介紹Dart基礎知識的時候基本上都是在一個檔案裡面編寫Dart代碼的,但實際開發中不可能這麼寫,子產品化很重要,是以這就需要使用到庫的概念。
在Dart中,庫的使用時通過import關鍵字引入的。
library指令可以建立一個庫,每個Dart檔案都是一個庫,即使沒有使用library指令來指定。
Dart中的庫主要有三種:
1、我們自定義的庫
import ‘lib/xxx.dart’;
2、系統内置庫
import ‘dart:math’;
import ‘dart:io’;
import ‘dart:convert’;
3、Pub包管理系統中的庫
https://pub.dev/packages
https://pub.flutter-io.cn/packages
https://pub.dartlang.org/flutter/
1、需要在自己想項目根目錄建立一個pubspec.yaml
2、在pubspec.yaml檔案 然後配置名稱 、描述、依賴等資訊
3、然後運作 pub get 擷取包下載下傳到本地
4、項目中引入庫 import ‘package:http/http.dart’ as http; 看文檔使用
Animal.dart
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(); //類裡面方法的互相調用
}
}
import 'lib/Animal.dart';
main(){
var a=new Animal('小黑狗', 20);
print(a.getName());
}
// 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{
//1、建立HttpClient對象
var httpClient = new HttpClient();
//2、建立Uri對象
var uri = new Uri.http('news-at.zhihu.com','/api/3/stories/latest');
//3、發起請求,等待請求
var request = await httpClient.getUrl(uri);
//4、關閉請求,等待響應
var response = await request.close();
//5、解碼響應的内容
return await response.transform(utf8.decoder).join();
}
async和await
這兩個關鍵字的使用隻需要記住兩點:
隻有async方法才能使用await關鍵字調用方法
如果調用别的async方法必須使用await關鍵字
async是讓方法變成異步。
await是等待異步方法執行完成。
void main() async{
var result = await testAsync();
print(result);
}
//異步方法
testAsync() async{
return 'Hello async';
}
pub包管理系統:
1、從下面網址找到要用的庫
2、建立一個pubspec.yaml檔案,内容如下
name: xxx
description: A new flutter module project.
dependencies:
http: ^0.12.0+2
date_format: ^1.0.6
3、配置dependencies
4、運作pub get 擷取遠端庫
5、看文檔引入庫使用
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]));
}
Person1.dart
class Person{
String name;
int age;
//預設構造函數的簡寫
Person(this.name,this.age);
Person.setInfo(String name,int age){
this.name=name;
this.age=age;
}
void printInfo(){
print("Person1:${this.name}----${this.age}");
}
}
Person2.dart
class Person{
String name;
int age;
//預設構造函數的簡寫
Person(this.name,this.age);
Person.setInfo(String name,int age){
this.name=name;
this.age=age;
}
void printInfo(){
print("Person2:${this.name}----${this.age}");
}
}
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();
}
myMath.dart
void getName(){
print('張三');
}
void getAge(){
print(20);
}
void getSex(){
print('男');
}
import 'lib/myMath.dart' hide getName;
void main(){
// getName();
getAge();
}
也稱為懶加載,可以在需要的時候再進行加載。
懶加載的最大好處是可以減少APP的啟動時間。
懶加載使用deferred as關鍵字來指定,如下例子所示:
import 'package:deferred/hello.dart' deferred as hello;
當需要使用的時候,需要使用loadLibrary()方法來加載:
greet() async {
await hello.loadLibrary();
hello.printGreeting();
}