likes
comments
collection
share

Flutter 基础之 Dart 中的库

作者站长头像
站长
· 阅读数 2

简介

dart 中,库(library)就是具有特定功能的模块,类似于 js 中的包。一个 dart 文件就可以是一个库,一个库也可以包含多个文件。库可以分为三类:系统库、自定义库和第三方库,下面分别做更具体的介绍。

系统库

如果想使用一些系统库,就需要先导入再使用,导入的方式为 import 'dart:库名';,比如使用 math 库:

import 'dart:math';

void main() {
  print(e); // 2.718281828459045
}

之所以可以打印得到数学常数 e,是因为在 math.dart 中定义了该常量:

Flutter 基础之 Dart 中的库

下面解释下上图中出现的其它一些内容:

  • library dart.math;:使用 library 来显示地声明库的名称,库名建议使用小写字母 + 下划线的形式;
  • import "dart:_internal" show SystemHash;show 代表部分引入,即只引入了 dart._internal 这个库中的 SystemHash,做到了按需引入。相对的,如果把 show 替换成 hide,则意味着隐藏一个库中某些内容;
  • part "point.dart";part 用于和子库建立联系,代表在 dart.math 库中,引入了 point.dart 这个库,在其它地方引入了 dart.math,就可以同时使用 point.dart 的公共内容了。相对应的,在 point.dart 中也需要使用 part of 来与主库建立联系,of 后的内容即为主库 library 声明的库名称:

Flutter 基础之 Dart 中的库

使用 partpart of 会比较麻烦,所以现在建议直接在主库使用 export 其它子库即可。比如 flutter 项目中,material 库中使用的就是 export

Flutter 基础之 Dart 中的库

核心库

系统库中的核心库则无需显示地导入,比如我们要创建个列表,尽管我们没有定义过 List.empty, 却可以直接 final l = List.empty(growable: true);,是因为 List 定义于 dart 系统库中的核心库 dart:core,会被默认引入,而不需要特地写出来import 'dart:core';

除了上面介绍的 dart:core 和 dart:math,更多系统库可参见官方文档

自定义库

引入自定义库的方式为 import '库的位置/库名.dart';。比如我们在 lib 目录下定义了个 utils/my_math.dart,里面有个 add 函数:

// lib/utils/my_math.dart
library my_math; // 一般省略

num add(num num1, num num2) {
  return num1 + num2;
}

然后就可以在其它文件引入 my_math 使用了,引入时路径可以用绝对路径,也可以像下面这样写,相当于是相对路径:

// lib/test.dart
import 'utils/my_math.dart';

void main() {
  print(add(1, 2)); // 3
}

如果担心引入的库的属性或方法之间有重名,可以使用 as 来给库起别名:

import 'utils/my_math.dart' as myMath;

void main() {
  print(myMath.add(1, 2)); // 3
}

第三方库

Flutter 基础之 Dart 中的库

然后将想要安装的库在 pubspec.yaml 中的 dependenciesdev_dependencies 声明,比如要安装 http 库:

name: dart
description: A new Dart project.
environment:
  sdk: '>=3.0.2 <4.0.0'
dependencies:
  http: ^1.0.0

保存文件时 vscode 就会自动帮我们安装第三方包了:

Flutter 基础之 Dart 中的库

如果想手动安装可以在 pubspec.yaml 所在的目录执行命令 dart pub get

Flutter 基础之 Dart 中的库

下载下来的包会放在系统缓存中,而不是像 node 项目那样会有个 node_modules 目录,比如我电脑上 http 就被放在了 AppData\Local\Pub\Cache\hosted\pub.flutter-io.cn\http-1.0.0:

Flutter 基础之 Dart 中的库

安装成功后会看到新生成一个 pubspec.lock 文件,起的作用类似于 node 项目中使用 npm 时的 package-lock.json 文件,记录着库的版本等信息。还会生成一个 .dart_tool\package_config.json 文件,里面记录着库文件的位置等信息。

在项目中引入已安装的第三方库的方法为 import 'package:xxx/xxxxx.dart'; 比如引入 http 就是:

import 'package:http/http.dart';

更改默认缓存位置

如果想更改默认的缓存目录,可以在环境变量中设置 PUB_CACHE 的值:

Flutter 基础之 Dart 中的库

如果原本项目已经安装了一些依赖,比如某个 flutter 项目,则可以执行命令 flutter pub cache clean 进行清除,然后再执行 flutter pub get 重新安装。

Flutter 基础之 Dart 中的库 Flutter 基础之 Dart 中的库

转载自:https://juejin.cn/post/7274902683404042303
评论
请登录