Flutter

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

2020-05-15  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读