天天看點

Dart語言詳解-10 庫1 庫-使用核心庫2 庫-載入第三方庫3 庫-載入檔案4 庫-指定庫字首5 庫-選擇性載入6 庫-延遲載入7 庫-自定義庫

文章目錄

  • 1 庫-使用核心庫
  • 2 庫-載入第三方庫
  • 3 庫-載入檔案
  • 4 庫-指定庫字首
  • 5 庫-選擇性載入
  • 6 庫-延遲載入
  • 7 庫-自定義庫

1 庫-使用核心庫

使用import關鍵字來載入庫:

import "dart:math";

void main() {
  print(sqrt(4));//開平方 2.0
}
           

2 庫-載入第三方庫

https://pub.flutter-io.cn/

1.編寫pubspec.yaml:

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^0.1.0
  dio: ^2.1.0
           

2.調用

import "package:dio/dio.dart";

void main() {
  getHttp();
}

void getHttp() async {
  try {
    Response response = await Dio().get("https://www.baidu.com");
    print(response);
  } catch (e) {
    print(e);
  }
}

           

3 庫-載入檔案

建立一個mylib1.dart

class MyLib {
  String name;
  static MyLib _cache; //工廠構造函數無法通路 this。是以這裡要靜态的

  factory MyLib([String name = 'singleton']) =>
      MyLib._cache ??= MyLib._newObject(name);

  //定義一個命名構造函數用來生産執行個體
  MyLib._newObject(this.name);
}

class Test {
  void test() => print('Test');
}

test(){

}

           
//載入檔案
import “mylib1.dart";

void main() {
  var myLib1 = MyLib();
}
           

4 庫-指定庫字首

如果兩個庫有沖突的辨別符,可以為其中一個或兩個庫都指定字首:

mylib1.dart

class MyLib {
  String name;
  static MyLib _cache; //工廠構造函數無法通路 this。是以這裡要靜态的

  factory MyLib([String name = 'singleton']) =>
      MyLib._cache ??= MyLib._newObject(name);

//定義一個命名構造函數用來生産執行個體
  MyLib._newObject(this.name);
}

class Test {
  void test() => print('Test');
}

test(){

}
           

mylib2.dart

class MyLib{
  String name;
  static MyLib _cache; //工廠構造函數無法通路 this。是以這裡要靜态的

  factory MyLib([String name = 'singleton']) =>
      MyLib._cache ??= MyLib._newObject(name);

//定義一個命名構造函數用來生産執行個體
  MyLib._newObject(this.name);
}

class Test{
  void test() => print('Test');
}
           

載入檔案

import 'mylib1.dart' as lib1; //載入檔案
import 'mylib2.dart' as lib2; //如果兩個庫有沖突的辨別符,可以為其中一個或兩個庫都指定字首

void main() {
  var myLib = lib1.MyLib();
  var myLib2 = lib2.MyLib();
}
           

5 庫-選擇性載入

  • show-隻載入庫的某些部分
  • hide-篩選掉庫的某些部分
import 'mylib1.dart' as lib1 show Test; //隻載入庫的某些部分
import 'mylib2.dart' as lib2 hide Test; //篩選掉庫的某些部分

void main(){
  //選擇性載入
  var test = lib1.Test();
  var lib = lib2.MyLib();

}
           

6 庫-延遲載入

  • 使用deferred as導入
  • 使用辨別符調用loadLibrary()加載庫
import 'mylib1.dart' deferred as lazyLib; //延遲載入

void main(){
  //延遲載入
  lazyLoad();
}
//延遲載入
//可提高程式啟動速度
//用在不常使用的功能
//用在載入時間過長的包
lazyLoad() async {
  await lazyLib.loadLibrary();
  var t = lazyLib.Test();
  t.test();
}
           

7 庫-自定義庫

建立util.dart

part of mylib;

void printUtil() => print('util');
           

建立tool.dart

part of mylib;

void printTool() => print('tool');
           

建立mylib.dart

library mylib;

part 'util.dart';
part 'tool.dart';

void printMyLib() => print('mylib');
           
import 'mylib/mylib.dart';//載入自定義庫

void main(){
  //載入自定義庫
  printMyLib();
  printUtil();
  printTool();
}
           

列印:

mylib
util
tool