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 声明的库名称:

使用 part 和 part 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 中的 dependencies 或 dev_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';

相关推荐
梦想的颜色4 小时前
【编程实战】AI 时代 APP 开发全栈硬核指南:技术选型 + AI 架构 + 模型落地全维度决策
python·flutter·react native·react.js·ai·桌面应用·milvus
yuanlaile1 天前
2026年全新Flutter 跨平台开发全栈学习资料整理
flutter·getx·鸿蒙 next·flutter开发鸿蒙·flutter入门实战·flutter全栈
恋猫de小郭1 天前
Genkit Dart 1.0 发布,Flutter 原生的 AI Agent 终于完整了
android·前端·flutter
第10086个小白1 天前
flutter桌面端打包方式(Inno Setup Compiler)版本
前端·flutter
陆断枫2 天前
Flutter 3.47 动画引擎盘点:Impeller 全平台,和那些"新特性"
flutter
程序员老刘2 天前
Flet 1.0 思路很好,可惜来晚了
flutter·ai编程·客户端
m0_738185822 天前
Flutter 鸿蒙化实战:qr_code_scanner_plus 适配 OpenHarmony,二维码扫描
flutter·华为·harmonyos·鸿蒙
恋猫de小郭2 天前
Flutter + EmbeddingGemma 2,谷歌发布完全端侧的 AI Edge Foresight
android·前端·flutter
君赏3 天前
基于 FlutterPatch 快速接入 Flutter 热更新
flutter
律宏阔3 天前
Dart FFI 内存管理:用 using + Arena 替代嵌套 try-finally
前端·flutter