使用软件包
Flutter 支持使用其他开发者贡献给 Flutter 和 Dart 生态系统的共享软件包。这允许快速构建应用程序,而无需从头开始开发所有内容。
现有软件包支持多种用例,例如,进行网络请求 (http
)、导航/路由处理 (go_router
)、与设备 API 集成 (url_launcher
和 battery_plus
),以及使用第三方平台 SDK(如 Firebase (FlutterFire))。
如需编写新软件包,请参阅 开发软件包。如需添加存储在文件或软件包中的资源、图片或字体,请参阅 添加资源和图片。
使用软件包
以下部分介绍如何使用现有的已发布软件包。
搜索软件包
软件包发布到 pub.dev。
pub.dev 上的 Flutter 着陆页显示与 Flutter 兼容的热门软件包(声明的依赖项通常与 Flutter 兼容),并支持在所有已发布软件包中进行搜索。
pub.dev 上的 Flutter 收藏 页面列出了在编写应用时应首先考虑使用的插件和软件包。如需详细了解成为 Flutter 收藏的含义,请参阅 Flutter 收藏计划。
您还可以通过筛选 Android、iOS、Web、Linux、Windows、macOS 或其任意组合来浏览 pub.dev 上的软件包。
向应用添加软件包依赖项
如需向应用添加软件包 css_colors
- 依赖它
- 打开位于应用文件夹内的
pubspec.yaml
文件,并在dependencies
下添加css_colors:
。
- 打开位于应用文件夹内的
- 安装它
- 从终端:运行
flutter pub get
。
或 - 从 VS Code:单击
pubspec.yaml
顶部操作功能区的右侧中显示的下载图标,即 获取软件包。 - 从 Android Studio/IntelliJ:单击
pubspec.yaml
顶部操作功能区的 Pub get。
- 从终端:运行
- 导入它
- 在 Dart 代码中添加相应的
import
语句。
- 在 Dart 代码中添加相应的
- 必要时停止并重新启动应用
- 如果软件包包含特定于平台的代码(Android 的 Kotlin/Java,iOS 的 Swift/Objective-C),则必须将该代码构建到您的应用中。热重载和热重启只会更新 Dart 代码,因此可能需要完全重启应用以避免在使用软件包时出现
MissingPluginException
之类的错误。
- 如果软件包包含特定于平台的代码(Android 的 Kotlin/Java,iOS 的 Swift/Objective-C),则必须将该代码构建到您的应用中。热重载和热重启只会更新 Dart 代码,因此可能需要完全重启应用以避免在使用软件包时出现
flutter pub add
向应用添加软件包依赖项
使用 如需向应用添加软件包 css_colors
- 在项目目录中发出命令
flutter pub add css_colors
- 导入它
- 在 Dart 代码中添加相应的
import
语句。
- 在 Dart 代码中添加相应的
- 必要时停止并重新启动应用
- 如果软件包包含特定于平台的代码(Android 的 Kotlin/Java,iOS 的 Swift/Objective-C),则必须将该代码构建到您的应用中。热重载和热重启只会更新 Dart 代码,因此可能需要完全重启应用以避免在使用软件包时出现
MissingPluginException
之类的错误。
- 如果软件包包含特定于平台的代码(Android 的 Kotlin/Java,iOS 的 Swift/Objective-C),则必须将该代码构建到您的应用中。热重载和热重启只会更新 Dart 代码,因此可能需要完全重启应用以避免在使用软件包时出现
flutter pub remove
向应用移除软件包依赖项
使用 要向应用移除软件包 css_colors
- 在项目目录中发出命令
flutter pub remove css_colors
在 pub.dev 上任何软件包页面上可用的 安装选项卡 是这些步骤的便捷参考。
有关完整示例,请参见下面的 css_colors 示例。
冲突解决
假设您想在应用中使用 some_package
和 another_package
,并且这两个都依赖于 url_launcher
,但版本不同。这会导致潜在冲突。避免这种情况的最佳方法是,软件包作者在指定依赖项时使用 版本范围,而不是特定版本。
dependencies:
url_launcher: ^5.4.0 # Good, any version >= 5.4.0 but < 6.0.0
image_picker: '5.4.3' # Not so good, only version 5.4.3 works.
如果 some_package
声明了上述依赖项,而 another_package
声明了一个兼容的 url_launcher
依赖项,如 '5.4.6'
或 ^5.5.0
,则 pub 会自动解决此问题。对 Gradle 模块 和/或 CocoaPods 的特定于平台的依赖项的解决方式类似。
即使 some_package
和 another_package
为 url_launcher
声明了不兼容的版本,它们实际上也可能以兼容的方式使用 url_launcher
。在这种情况下,可以通过向应用的 pubspec.yaml
文件添加依赖项覆盖声明来解决冲突,强制使用特定版本。
例如,要强制使用 url_launcher
版本 5.4.0
,请对应用的 pubspec.yaml
文件进行以下更改
dependencies:
some_package:
another_package:
dependency_overrides:
url_launcher: '5.4.0'
如果冲突的依赖项本身不是一个软件包,而是一个特定于 Android 的库,如 guava
,则必须将依赖项覆盖声明添加到 Gradle 构建逻辑中。
要强制使用 guava
版本 28.0
,请对应用的 android/build.gradle
文件进行以下更改
configurations.all {
resolutionStrategy {
force 'com.google.guava:guava:28.0-android'
}
}
CocoaPods 目前不提供依赖项覆盖功能。
开发新软件包
如果没有针对您的特定用例的软件包,您可以编写自定义软件包。
管理软件包依赖项和版本
为最大程度降低版本冲突的风险,请在 pubspec.yaml
文件中指定版本范围。
软件包版本
所有软件包都有一个版本号,在软件包的 pubspec.yaml
文件中指定。软件包的当前版本显示在其名称旁边(例如,请参阅 url_launcher
软件包),以及所有先前版本的列表(请参阅 url_launcher
版本)。
为确保在更新软件包时应用不会中断,请使用以下格式之一指定版本范围。
-
范围约束:指定最小版本和最大版本。
dependencies: url_launcher: '>=5.4.0 <6.0.0'
-
使用 插入符号语法的范围约束:指定作为最小包含版本的那个版本。这涵盖从该版本到下一个主要版本的所有版本。
dependencies: collection: '^5.4.0'
此语法与第一个项目符号中指出的语法含义相同。
要了解更多信息,请查看 软件包版本指南。
更新软件包依赖项
在添加包后首次运行 flutter pub get
时,Flutter 会将 pubspec.lock
锁定文件 中找到的具体包版本保存下来。这样可以确保如果您或团队中的其他开发者运行 flutter pub get
,则会再次获取相同的版本。
要升级到包的新版本(例如,要使用该包中的新功能),请运行 flutter pub upgrade
以检索包的最高可用版本,该版本由 pubspec.yaml
中指定的版本约束允许。请注意,此命令不同于 flutter upgrade
或 flutter update-packages
,它们都会更新 Flutter 本身。
对未发布包的依赖
即使没有在 pub.dev 上发布,也可以使用包。对于私有包或尚未准备好发布的包,可以使用其他依赖项选项
- 路径依赖
- Flutter 应用可以使用文件系统
path:
依赖项来依赖包。路径可以是相对路径或绝对路径。相对路径相对于包含pubspec.yaml
的目录进行评估。例如,要依赖位于应用旁边目录中的包 packageA,请使用以下语法dependencies: packageA: path: ../packageA/
- Git 依赖
- 您还可以依赖存储在 Git 存储库中的包。如果包位于存储库的根目录中,请使用以下语法
dependencies: packageA: git: url: https://github.com/flutter/packageA.git
- 使用 SSH 的 Git 依赖
- 如果存储库是私有的,并且您可以使用 SSH 连接到它,请使用存储库的 SSH URL 依赖包
dependencies: packageA: git: url: [email protected]:flutter/packageA.git
- 对文件夹中包的 Git 依赖
- Pub 假设包位于 Git 存储库的根目录中。如果不是这种情况,请使用
path
参数指定位置。例如dependencies: packageA: git: url: https://github.com/flutter/packages.git path: packages/packageA
最后,使用
ref
参数将依赖项固定到特定的 git 提交、分支或标签。有关更多详细信息,请参阅 包依赖项。
示例
以下示例介绍了使用包的必要步骤。
示例:使用 css_colors 包
css_colors
包定义了 CSS 颜色常量,因此在 Flutter 框架需要 Color
类型时,请使用这些常量。
要使用此包
-
创建一个名为
cssdemo
的新项目。 -
打开
pubspec.yaml
,并添加css-colors
依赖项dependencies: flutter: sdk: flutter css_colors: ^1.0.0
-
在终端中运行
flutter pub get
,或在 VS Code 中单击获取包。 -
打开
lib/main.dart
,并用以下内容替换其全部内容import 'package:css_colors/css_colors.dart'; import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp( home: DemoPage(), ); } } class DemoPage extends StatelessWidget { const DemoPage({super.key}); @override Widget build(BuildContext context) { return Scaffold(body: Container(color: CSSColors.orange)); } }
- 运行该应用。该应用的背景现在应该是橙色的。
示例:使用 url_launcher 包启动浏览器
url_launcher
插件包能够在移动平台上打开默认浏览器以显示给定的 URL,并且在 Android、iOS、Web、Windows、Linux 和 macOS 上受支持。此包是一个特殊的 Dart 包,称为插件包(或插件),其中包含特定于平台的代码。
要使用此插件
-
创建一个名为
launchdemo
的新项目。 -
打开
pubspec.yaml
,并添加url_launcher
依赖项dependencies: flutter: sdk: flutter url_launcher: ^5.4.0
-
在终端中运行
flutter pub get
,或在 VS Code 中单击获取包。 -
打开
lib/main.dart
,并用以下内容替换其全部内容import 'package:flutter/material.dart'; import 'package:path/path.dart' as p; import 'package:url_launcher/url_launcher.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp( home: DemoPage(), ); } } class DemoPage extends StatelessWidget { const DemoPage({super.key}); void launchURL() { launchUrl(p.toUri('https://flutterdart.cn')); } @override Widget build(BuildContext context) { return Scaffold( body: Center( child: ElevatedButton( onPressed: launchURL, child: const Text('Show Flutter homepage'), ), ), ); } }
-
运行该应用(或停止并重新启动该应用,如果在添加插件之前该应用已在运行)。单击显示 Flutter 主页。您应该会看到设备上打开了默认浏览器,显示 flutter.dev 的主页。