美文网首页Flutter
第九节: Dart 中的库/自定义库/内置库/第三方库

第九节: Dart 中的库/自定义库/内置库/第三方库

作者: 时光如剑 | 来源:发表于2020-05-15 10:52 被阅读0次

    Dart 语法学习目录

    第一节: Dart 语法了解,认识变量,常量,数据类型
    第二节: Dart 操作符(运算符)
    第三节: Dart 中流程控制,条件判断以及循环语句
    第四节: Dart 中常用集合 List/Map
    第五节: Dart 函数使用,声明函数/匿名函数/可选参数/作用域/闭包
    第六节: Dart 面向对象/构造函数/静态属性
    第七节: Dart中抽象类abstract/接口implements/混入Mixin
    第八节: Dart中泛型/泛型定义与使用
    第九节: Dart 中的库/自定义库/内置库/第三方库

    1. Dart 库的介绍

    1.1 Dart库的基本了解

    importlibrary 指令可以用来创建一个模块化的,可共享的代码库。 库不仅提供了 API ,而且对代码起到了封装的作用.

    说明:

    1. 默认情况下,每一个Dart文件就是一个库
    2. Dart中的可见性以library 为单位
    3. 使用_ 表示库的私有性
    4. 使用import 关键字导入库
    1.2 Dart 库的分类
    1. 自定义库: 每一个dart文件就是一个库(类似于模块化开发中模块的概念)
    2. 系统内置的库: dart自带的一些库,类似于node中系统自带的模块
    3. Pub 包管理系统中的库: 第三方库, 类似于nodenpm包管理工具管理的第三个模块

    2. Dart 库的使用

    2.1 自定义库的使用

    使用方法:

    1. 创建dart文件,例如lib/hello.dart
    2. 使用自定义的dart文件, import lib/hello.dart

    示例:

    创建自定义库

    自定义库.png

    代码部分

    // 自定义模块
    // 1. 自定义模块中的类
    class Person{
      // 属性
      String name;
      Person(this.name);
    
      // 方法
      getInfo(){
        print("大家好,我叫$name");
      }
    }
    
    // 2.自定义模块中的方法
    var str = "Hello";
    var name = "my name is 李四";
    sayHello(){
      print("$str,$name");
    }
    

    使用自定义库:

    使用自定义库.png

    运行结果:

    自定义库运行结果.png
    2.2 系统内置库的使用

    使用方式:

    1. import "dart:math"
    2. import "dart:io"
    3. import "dart:convert"

    注:

    系统内置的库有很多, 不用可以的去记, 有道理查一下就好了

    通过一个简单的示例了解Dart内置库

    // 1. 导入内置库
    import "dart:math";
    
    
    // 入口函数
    main(){
        // 2. 通过math内置库,使用Math上的方法
        // 导入内置库以后就可以使用内置库的方法
        // 获取最大值
        var num = max(10,50);
        print(num);   // 50 
    
        // 获取最小值
        var num2 = min(10,50);
        print(num2);   // 10
    
    }
    

    导入了数学的内置库,就可以使用math内置库中关于数学操作的方法

    内置库也有很多,在以后的学习会慢慢学习到.

    2.3 第三方库的使用

    Pub包管理系统中的第三方库的使用,有点类似于nodenpm的使用

    2.3.1 使用步骤
    1. 需要在项目根目录下新建一个pubspec.yaml文件,用于配置项目名称,描述,依赖等信息,类似package.json
    2. 通过pub get下载第三方库, 类似于npm install命令
    3. 在项目中引入库import "package:http:/http.dart as http",类似于node中使用模块
    2.3.2 搜索库的网址

    dart 第三方库: https://pub.dev/

    2.3.3 pubspec.yaml文件的配置
    name: main
    description: 这就是一个小小例子
    version: 1.0.0
    # 这是开发依赖
    dependencies:
      http: ^0.12.1
    

    配置图

    配置yaml.png
    2.3.4 使用第三方库

    代码:

    // 1. 导入第三方库
    import 'dart:convert' as convert;
    import 'package:http/http.dart' as http;
    
    // 入口函数
    main() async {
        // 2. 配置http请求路径
        var url = 'https://api.github.com/users/mojombo';
    
        // 3. 发送请求
        var response = await http.get(url);
    
        // 3.判断状态码是否为200 请求成功
        if (response.statusCode == 200) {
            var jsonResponse = convert.jsonDecode(response.body);
            // 打印数据
            print(jsonResponse);
        } else {
            print('Request failed with status: ${response.statusCode}.');
        }
    }
    

    使用第三个库截图:

    使用第三方库.png

    3. Dart库使用的特殊情况

    3.1 导入的库区别名

    为什么要给导入的库取别名呢, 因为导入的库可能会发生标识符冲突的问题, 我们先看看标识符冲突是怎么回事吧?

    3.1.1 标识符冲突的理解

    通过上面的学习,我们已经了解了,尤其以自定义库为类, 当自定库中的变量,函数,在使用是,感觉想是被定义为全局的变量,函数或者, 因为我们直接就可以使用

    有点类似于定义了很多个js文件,最后在页面中导入,

    这样的情况很容易发生全局标识符冲突. dart也一样.

    示例:

    自定义了两个库,但是两个库中都有相同的类

    代码部分:

    person.dart

    // 自定义库 person
    // 1. 自定义模块中的类
    class Person{
        // 属性
        String name;
        Person(this.name);
    
        // 方法
        getInfo(){
            print("大家好,我叫$name");
        }
    }
    
    // 2.自定义模块中的方法
    var str = "Hello";
    var name = "my name is 李四";
    sayHello(){
        print("$str,$name");
    }
    

    person2.dart

    // 自定义库 person2
    class Person{
      // 属性
      String name;
      int age;
      Person(this.name,this.age);
    
      // 方法
      getInfo(){
        print("大家好,我叫$name,今年$age岁了");
      }
      
    }
    

    结构图:

    库标识符冲突.png

    使用有冲突标识符的库

    代码:

    // 1. 使用自定义库
    import "lib/person.dart";
    import "lib/person2.dart";
    
    // 入口函数
    main(){
      
      // 1.库标识符冲突
      // 导入的两个库中都有Person类,
      // dart不知道用哪一个
      Person student = Person("张三");
      student.getInfo();
    
    }
    

    视图:

    导入有冲突标识符的不同库.png

    此时就会程序有问题,会报错, 因为dart不知道使用哪一个库中的Person

    3.1.1 导入的库取别名解决标识符问题

    通过as关键字给导入的库取别名, 然后通过这个别名调用库中的变量,函数,以及.

    取别名的说明:

    1. 一旦给导入的库取了别名,那么库中的变量,函数,等就不能直接使用了,
    2. 取别名的库需要通过别名来调用库中的内容

    简而言之: 感觉就像是把库中的内容封装在了一个对象中,成为对象的属性或方法. 别名就是对象名

    示例:

    还是上面的示例: 在调用时取别名

    代码部分:

    // 1. 使用自定义库
    import "lib/person.dart" as lib;
    // 给导入的person2.dart取别名
    import "lib/person2.dart";
    
    // 入口函数
    main(){
    
        // 1. 因为person2.dart没有别名,
        // 使用库中的库就是类默认是使用person2中的类
        Person student = Person("张三",18);
        student.getInfo();
    
        // 2. 有别名库的使用
        // 有别名的库需要使用别名调用库中的内容
        // 2.1 使用别名库中的类
        lib.Person student2 = lib.Person("唐三");
        student2.getInfo();
    
        // 2.2 使用别名库中的方法
        lib.sayHello();
    }
    

    视图:

    别名库的使用.png
    3.2 导入库中的一部分内容

    情况说明:

    1. 有的时候我们不见得需要导入库中的所有方法
    2. 因此我们就可以有针对性的使用库中的我们需要的那一部分代码

    示例,先看一看正常使用库,

    代码:

    // 自定义库
    // 方法一
    getInfo(){
        print("getInfo方法");
    }
    
    // 方法二
    getInfo2(){
        print("getInfo2方法");
    }
    
    // 方法二
    getInfo3(){
        print("getInfo3方法");
    }
    

    视图:

    多方法自定义库.png

    如果按照正常导入库的流程,三个方法都可以使用

    代码部分:

    // 1. 使用自定义库
    import "lib/getInfo.dart";
    
    // 入口函数
    main(){
      
      // 使用自定义方法中的三个库
      getInfo();    // getInfo方法
      getInfo2();   // getInfo2方法
      getInfo3();   // getInfo3方法
    }
    

    视图:

    正常使用自定义库.png

    通过上的示例我们知道, 正常使用库的使用,是可以使用库中的所有方法的, 但有的使用只要使用库中的一部分代码

    3.2.1 使用show关键字,指定库中需要使用的部分

    通过示例了解show的使用

    代码部分:

    // 1. 使用自定义库
    // 通过show关键字指定使用库中的那一部分
    import "lib/getInfo.dart" show getInfo;
    
    // 入口函数
    main(){
    
        // 当我们通过show指定使用库中的内容后
        // 只有我们指定方法一使用, 
        // 未指定的方法不能使用
        getInfo();    // getInfo方法
        getInfo2();   // getInfo2方法
        getInfo3();   // getInfo3方法
    }
    

    视图:

    show关键字.png
    3.2.1 使用hide关键字,指定库中不需要使用的部分

    相信通过刚才的学习,你已经对于show的使用有一定的来了解了,

    那么反过来思考,如果库中只有一个我们不需要使用的方法,那么通过show来罗列所有需要使用发方法就显得特别繁琐

    所以dart中也可以使用hide关键字指定库中不需要使用的方法,未指定的都是可以使用的.

    代码:

    // 1. 使用自定义库
    // 通过hide关键字指定库中不使用的部分
    import "lib/getInfo.dart" hide getInfo;
    
    // 入口函数
    main(){
    
        // 当我们通过hide指定库中不需要使用的内容
        // hide关键字方法指定的是不需要使用的内容
        // 未指定的方法都能使用
        getInfo();    // getInfo方法
        getInfo2();   // 直接标红不能使用
        getInfo3();   // 直接标红不能使用
    }
    

    示例:

    hide关键字指定不需要使用的内容.png

    相关文章

      网友评论

        本文标题:第九节: Dart 中的库/自定义库/内置库/第三方库

        本文链接:https://www.haomeiwen.com/subject/lunqohtx.html