使用软件包
Flutter 支持使用其他开发者贡献给 Flutter 和 Dart 生态系统的共享软件包。这使得您可以快速构建应用程序,而无需从头开始开发所有内容。
现有的软件包支持许多用例——例如,发出网络请求 (http
)、导航/路由处理 (go_router
)、与设备 API 集成 (url_launcher
和 battery_plus
),以及使用 Firebase 等第三方平台 SDK (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
版本)。
为了确保在更新软件包时应用程序不会中断,请使用以下格式之一指定版本范围。
**范围约束:**指定最小版本和最大版本。
yamldependencies: url_launcher: '>=5.4.0 <6.0.0'
**使用 脱字符号语法 的范围约束:**指定用作包含最小版本的版本。这涵盖了从该版本到下一个主要版本的的所有版本。
yamldependencies: 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,请使用以下语法yamldependencies: packageA: path: ../packageA/
- Git 依赖项
您还可以依赖存储在 Git 存储库中的包。如果包位于仓库的根目录,请使用以下语法
yamldependencies: packageA: git: url: https://github.com/flutter/packageA.git
- 使用 SSH 的 Git 依赖项
如果存储库是私有的并且您可以使用 SSH 连接到它,则通过使用仓库的 SSH url 来依赖包
yamldependencies: packageA: git: url: [email protected]:flutter/packageA.git
- 文件夹中包的 Git 依赖项
Pub 假设包位于 Git 存储库的根目录。如果不是这种情况,请使用
path
参数指定位置。例如yamldependencies: 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
依赖项yamldependencies: flutter: sdk: flutter css_colors: ^1.0.0
在终端中运行
flutter pub get
,或在 VS Code 中点击获取包。打开
lib/main.dart
并将其全部内容替换为dartimport '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
依赖项yamldependencies: flutter: sdk: flutter url_launcher: ^5.4.0
在终端中运行
flutter pub get
,或在 VS Code 中点击获取包。打开
lib/main.dart
并将其全部内容替换为以下内容dartimport '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 的首页。
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面上次更新时间:2024-07-06。 查看源代码 或 报告问题。