Flutter 基础之 Dart 中的库

简介

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

系统库

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

dart 复制代码
import 'dart:math';

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

之所以可以打印得到数学常数 e,是因为在 math.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 声明的库名称:

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

核心库

系统库中的核心库则无需显示地导入,比如我们要创建个列表,尽管我们没有定义过 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 函数:

dart 复制代码
// lib/utils/my_math.dart
library my_math; // 一般省略

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

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

dart 复制代码
// lib/test.dart
import 'utils/my_math.dart';

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

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

dart 复制代码
import 'utils/my_math.dart' as myMath;

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

第三方库

就像 node 项目安装第三方包需要 package.json 一样,dart 中使用第三方库需要创建 pubspec.yaml,yaml 是一种文件格式,主要是以缩进的方式来实现上下级代码的分割。我们可以在 pub.dev 上查看可以安装的第三方库(类似于 node 的 npmjs):

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

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

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

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

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

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

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

dart 复制代码
import 'package:http/http.dart';

相关推荐
jcLee9518 小时前
Flutter/Dart:使用日志模块Logger Easier
flutter·log4j·dart·logger
tmacfrank18 小时前
Flutter 异步编程简述
flutter
tmacfrank19 小时前
Flutter 基础知识总结
flutter
叫我菜菜就好20 小时前
【Flutter_Web】Flutter编译Web第三篇(网络请求篇):dio如何改造方法,变成web之后数据如何处理
前端·网络·flutter
AiFlutter1 天前
Flutter-底部分享弹窗(showModalBottomSheet)
java·前端·flutter
m0_748247802 天前
Flutter Intl包使用指南:实现国际化和本地化
前端·javascript·flutter
迷雾漫步者2 天前
Flutter组件————PageView
flutter·跨平台·dart
迷雾漫步者2 天前
Flutter组件————FloatingActionButton
前端·flutter·dart
coder_pig3 天前
📝小记:Ubuntu 部署 Jenkins 打包 Flutter APK
flutter·ubuntu·jenkins
捡芝麻丢西瓜3 天前
flutter自学笔记5- dart 编码规范
flutter·dart