库.dart

2020-05-15  本文已影响0人  Clover园

/**
 * 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文件 然后配置名称 、描述、依赖等信息
          name:'',description: '',dependencies: 
        3、然后运行 pub get 获取包下载到本地  
        4、项目中引入库 import 'package:http/http.dart' as http; 
        5、看文档使用

*   4.Dart提供了额外的机制来控制导入到库内的对象:命名组合器show和hide。
      import 'package:math' show Random; 
      import 'package:math' hide Random;
*   5. 延迟加载 懒加载使用deferred as关键字来指定
      import 'package:deferred/hello.dart' deferred as hello;

      greet() async
      {
          await hello.loadLibrary();
          hello.printGreeting();
      }
*  6.常用库
    dart:io 服务器应用程序的文件,套接字,HTTP和其他I/O支持。此库在基于浏览器的应用程序中不起作用。默认情况下会导入此库。
    dart:core 每个Dart程序的内置类型,集合和其他核心功能。默认情况下会导入此库
    dart:math  数学常数和函数,随机数生成器。
    dart:convert 用于在不同数据表示之间进行转换的编码器和解码器,包括JSON和UTF-8。
    dart:typed_data 有效处理固定大小数据的列表(例如,无符号8字节整数)。

    import 'dart:math'; 
    void main()
    { 
        print("Square root of 36 is: ${sqrt(36)}");
        print(min(12,23))

        // 运行结果:
        // Square root of 36 is: 6.0
        //12
    }

  7. 封装库
      Dart可以使用下划线(_)为标识符添加前缀,以将其组件标记为私有。简而言之,Dart库可以通过外部脚本限制对其内容的访问,称为封装。

      1.首先,使用私有函数定义库。
        library logger_lib;
        void log(String msg){
            print("Log method called in logger_lib msg:$msg");
        }
        void _log1(String msg){
            print("Log1 method called in logger_lib msg:$msg");
        }
      2.导入库
        import 'lib/logger_lib.dart' as logLib;
        void main(){
            logLib.log("hello dart!"); // Log method called in logger_lib msg:hello dart!
            logLib._log1("hello dart!"); // Error: Method not found: '_log1'.私有的
        }
  8.创建自定义库
    1. 声明库
      要显式声明库,请使用库语句。声明库的语法如下:library library_name;
    2.关联库
      在同一目录中:import 'library_name';
      在不同的目录中:import 'dir/library_name';
    3.实例
      .定义一个自定义库:logger_lib.dart
        library logger_lib;
        void log(String msg){
          print("Log msg:$msg");
        }
      .导入自定义的库
        import 'lib/logger_lib.dart';
        void main() {
            log("hello dart!"); // Log msg:hello dart!
        }
  9. 库前缀 如果导入两个具有冲突标识符的库,则可以为一个或两个库指定前缀。使用as关键字指定前缀。
      1. 定义一个自定义库:logger_lib.dart
        library logger_lib;
        void log(String msg){
            print("Log method called in logger_lib msg:$msg");
        }
      2. 定义另一个自定义库:other_logger_lib.dart
        library other_logger_lib;
        void log(String msg){
            print("Log method called in other_logger_lib msg:$msg");
        }
      3. 导入带有前缀的库
        import 'lib/logger_lib.dart';
        import 'lib/other_logger_lib.dart' as other_lib;
        void main(){
            log("hello dart!");             // Log method called in logger_lib msg:hello dart!
            other_lib.log("hello dart!");   // Log method called in other_logger_lib msg:hello dart!
        }
  10.async和await
      1. 只有async方法才能使用await关键字调用方法.
      2. 如果调用别的async方法必须使用await关键字.
      3. async是让方法变成异步。
      4. await是等待异步方法执行完成。
      void main() async {
          var result = await testAsync();
          print(result);  // Hello async

      }
      // 异步方法
      testAsync() async {
          return 'Hello async';
      }
  11.库的拆分part、part of  注意part各文件是互知存在的,是一个整体,所有对象是共享的(各部分不许重复引入),实际使用单个方法时必须引入整体的那个模块(本例子中的整体模块为util.dart)
      1.定义一个自定义类:util.dart
        library util;
        import 'dart:math';
        part 'logger.dart';
        part 'calculator.dart';
      2.定义logger.dart中的方法:
        part of util;
        void log(String msg){
            print("Log msg:$msg");
        }
      3.定义calculator.dart中的方法:
        part of util;
        int add(int firstNumber, int secondNumber){
            print("inside add method of Calculator Library ") ;
            return firstNumber + secondNumber;
        }
        int modulus(int firstNumber, int secondNumber){
            print("inside modulus method of Calculator Library ") ;
            return firstNumber % secondNumber;
        }
        int random(int no){
            return new Random().nextInt(no);
        }
      4.使用
        import 'lib/util.dart';
        void main() async {
            log("hello dart!"); // 调用util中的log方法,结果为:Log msg:hello dart!
            print(add(12, 34));     // 调用util中的add方法,结果为:46
        }
  12. 库的导出export
      多个较小的库组合为一个较大的库或者重新导出库的一部分作为一个新的库
      export各文件是互相不可见的,如果在A库中export了B库、C库,A库是包含B、C库的全部的。
      1.定义logger.dart
        library logger;
        void log(String msg){
            print("Log msg:$msg");
        }
      2.定义calculator.dart中的方法:
        library calculator.dart;
        import 'dart:math';
        int add(int firstNumber, int secondNumber){
            print("inside add method of Calculator Library ") ;
            return firstNumber + secondNumber;
        }
        int modulus(int firstNumber, int secondNumber){
            print("inside modulus method of Calculator Library ") ;
            return firstNumber % secondNumber;
        }
        int random(int no){
            return new Random().nextInt(no);
        }
      3.定义util.dart
        library util;
        export 'calculator.dart';
        export 'logger.dart';
      4.使用
        import 'lib/util.dart';
        void main() async {
          log("hello dart!"); // 调用util中的log方法,结果为:Log msg:hello dart!
          print(add(12, 34));     // 调用util中的add方法,结果为:46
        }
      
 */
上一篇下一篇

猜你喜欢

热点阅读