开发软件包和插件
软件包简介
软件包支持创建可以轻松共享的模块化代码。最小软件包包含以下内容
pubspec.yaml
- 元数据文件,用于声明软件包名称、版本、作者等。
lib
lib
目录包含软件包中的公共代码,至少包含一个<package-name>.dart
文件。
软件包类型
软件包可以包含多种内容
- Dart 软件包
- 用 Dart 编写的常规软件包,例如
path
软件包。其中一些可能包含特定于 Flutter 的功能,因此依赖于 Flutter 框架,从而将其使用限制为仅限 Flutter,例如fluro
软件包。 - 插件软件包
- 一种专门的 Dart 软件包,其中包含用 Dart 代码编写的 API,并结合一个或多个特定于平台的实现。
插件包可以为 Android(使用 Kotlin 或 Java)、iOS(使用 Swift 或 Objective-C)、Web、macOS、Windows 或 Linux 编写,或者它们的任意组合。
一个具体示例是
url_launcher
插件包。要了解如何使用url_launcher
包,以及如何对其进行扩展以实现对 Web 的支持,请参阅 Harry Terkelsen 的 Medium 文章 如何编写 Flutter Web 插件,第 1 部分。 - FFI 插件包
- 一个专门的 Dart 包,其中包含用 Dart 代码编写的 API,以及一个或多个使用 Dart FFI(Android、iOS、macOS)的特定于平台的实现。
开发 Dart 包
以下说明解释了如何编写 Flutter 包。
步骤 1:创建包
要创建入门级 Flutter 包,请将 --template=package
标志与 flutter create
一起使用
$ flutter create --template=package hello
这将在 hello
文件夹中创建一个包项目,其中包含以下内容
- LICENSE
- 一个(基本上)空的许可证文本文件。
- test/hello_test.dart
- 包的 单元测试。
- hello.iml
- IntelliJ IDE 使用的一个配置文件。
- .gitignore
- 一个隐藏文件,用于告诉 Git 在项目中忽略哪些文件或文件夹。
- .metadata
- 一个隐藏文件,由 IDE 用于跟踪 Flutter 项目的属性。
- pubspec.yaml
- pubspec.yaml
- 一个包含元数据的 yaml 文件,用于指定包的依赖项。由 pub 工具使用。
- README.md
- 一个入门级 markdown 文件,用于简要描述包的用途。
- lib/hello.dart
- 一个入门级应用,其中包含包的 Dart 代码。
- .idea/modules.xml, .idea/workspace.xml
- 一个隐藏文件夹,其中包含 IntelliJ IDE 的配置文件。
- 一个(基本上)空的 markdown 文件,用于跟踪软件包的版本更改。
步骤 2:实现软件包
对于纯 Dart 软件包,只需在主 lib/<package name>.dart
文件中或 lib
目录中的多个文件中添加功能即可。
要测试软件包,请在 test
目录中添加 单元测试。
有关如何组织软件包内容的更多详细信息,请参阅 Dart 库软件包文档。
开发插件软件包
如果你想开发一个调用平台特定 API 的软件包,你需要开发一个插件软件包。
API 使用 平台通道连接到平台特定实现。
联合插件
联合插件是一种将对不同平台的支持拆分为单独软件包的方法。因此,联合插件可以使用一个软件包用于 iOS,另一个用于 Android,另一个用于 Web,还可以使用另一个用于汽车(作为物联网设备的一个示例)。除了其他好处外,这种方法还允许领域专家扩展现有插件,使其适用于他们最熟悉的平台。
联合插件需要以下软件包
- 面向应用的软件包
- 插件用户依赖于使用插件的软件包。此软件包指定 Flutter 应用使用的 API。
- 平台软件包
- 包含平台特定实现代码的一个或多个软件包。面向应用的软件包调用这些软件包——除非它们包含最终用户可访问的平台特定功能,否则它们不会包含在应用中。
- 平台接口软件包
- 将面向应用的软件包粘合到平台软件包的软件包。此软件包声明任何平台软件包必须实现的接口以支持面向应用的软件包。拥有定义此接口的单个软件包可确保所有平台软件包以统一的方式实现相同的功能。
认可的联合插件
理想情况下,在向联合插件添加平台实现时,你将与软件包作者协调以包含你的实现。通过这种方式,原始作者认可你的实现。
例如,假设你为(假想的)foobar
插件编写了一个 foobar_windows
实现。在认可的插件中,原始 foobar
作者将你的 Windows 实现作为面向应用的软件包的 pubspec 中的依赖项添加。然后,当开发人员在其 Flutter 应用中包含 foobar
插件时,Windows 实现以及其他认可的实现将自动对应用可用。
未认可的联合插件
无论出于何种原因,如果您无法让原始插件作者添加您的实现,那么您的插件不会被认可。开发人员仍然可以使用您的实现,但必须手动将插件添加到应用程序的 pubspec 文件中。因此,开发人员必须同时包含 foobar
依赖项和 foobar_windows
依赖项才能实现全部功能。
有关联合插件的更多信息、它们为何有用以及如何实现它们,请参阅 Harry Terkelsen 的 Medium 文章,如何编写 Flutter Web 插件,第 2 部分。
指定插件支持的平台
插件可以通过向 pubspec.yaml
文件中的 platforms
映射添加键来指定它们支持的平台。例如,以下 pubspec 文件显示了 hello
插件的 flutter:
映射,该插件仅支持 iOS 和 Android
flutter:
plugin:
platforms:
android:
package: com.example.hello
pluginClass: HelloPlugin
ios:
pluginClass: HelloPlugin
在为更多平台添加插件实现时,应相应更新 platforms
映射。例如,以下是 hello
插件的 pubspec 文件中的映射,在更新后增加了对 macOS 和 Web 的支持
flutter:
plugin:
platforms:
android:
package: com.example.hello
pluginClass: HelloPlugin
ios:
pluginClass: HelloPlugin
macos:
pluginClass: HelloPlugin
web:
pluginClass: HelloPlugin
fileName: hello_web.dart
联合平台包
平台包使用相同的格式,但包含一个 implements
条目,指示它实现哪个面向应用程序的包。例如,一个包含 hello
的 Windows 实现的 hello_windows
插件将具有以下 flutter:
映射
flutter:
plugin:
implements: hello
platforms:
windows:
pluginClass: HelloPlugin
认可的实现
面向应用程序的包可以通过添加对它的依赖项并将其作为 platforms:
映射中的 default_package
来认可平台包。如果上面的 hello
插件认可 hello_windows
,它将如下所示
flutter:
plugin:
platforms:
android:
package: com.example.hello
pluginClass: HelloPlugin
ios:
pluginClass: HelloPlugin
windows:
default_package: hello_windows
dependencies:
hello_windows: ^1.0.0
请注意,如这里所示,面向应用程序的包可以在包内实现一些平台,在认可的联合实现中实现其他平台。
共享 iOS 和 macOS 实现
许多框架都支持 iOS 和 macOS,且具有相同或几乎相同的 API,这使得使用相同的代码库为 iOS 和 macOS 实现一些插件成为可能。通常,每个平台的实现都位于其自己的文件夹中,但 sharedDarwinSource
选项允许 iOS 和 macOS 代替使用同一个文件夹
flutter:
plugin:
platforms:
ios:
pluginClass: HelloPlugin
sharedDarwinSource: true
macos:
pluginClass: HelloPlugin
sharedDarwinSource: true
environment:
sdk: ^3.0.0
# Flutter versions prior to 3.7 did not support the
# sharedDarwinSource option.
flutter: ">=3.7.0"
启用 sharedDarwinSource
时,iOS 的 ios
目录和 macOS 的 macos
目录将被替换,这两个平台都将使用共享的 darwin
目录来存放所有代码和资源。启用此选项时,你需要将 ios
和 macos
中的任何现有文件移动到共享目录。你还需要更新 Podspec 文件,以设置两个平台的依赖项和部署目标,例如
s.ios.dependency 'Flutter'
s.osx.dependency 'FlutterMacOS'
s.ios.deployment_target = '11.0'
s.osx.deployment_target = '10.14'
步骤 1:创建包
要创建插件包,请将 --template=plugin
标志与 flutter create
结合使用。
使用 --platforms=
选项,后跟一个逗号分隔的列表,以指定插件支持的平台。可用的平台有:android
、ios
、web
、linux
、macos
和 windows
。如果未指定任何平台,则生成的项目不支持任何平台。
使用 --org
选项指定你的组织,使用反向域名表示法。此值用于生成的插件代码中的各种包和捆绑标识符。
使用 -a
选项指定 Android 的语言,或使用 -i
选项指定 iOS 的语言。请选择以下选项之一
$ flutter create --org com.example --template=plugin --platforms=android,ios,linux,macos,windows -a kotlin hello
$ flutter create --org com.example --template=plugin --platforms=android,ios,linux,macos,windows -a java hello
$ flutter create --org com.example --template=plugin --platforms=android,ios,linux,macos,windows -i objc hello
$ flutter create --org com.example --template=plugin --platforms=android,ios,linux,macos,windows -i swift hello
这将在 hello
文件夹中创建一个插件项目,其中包含以下专门内容
一个入门级 markdown 文件,用于简要描述包的用途。
- 插件的 Dart API。
android/src/main/java/com/example/hello/HelloPlugin.kt
- Kotlin 中插件 API 的 Android 平台特定实现。
ios/Classes/HelloPlugin.m
- Objective-C 中插件 API 的 iOS 平台特定实现。
example/
- 依赖于插件且说明如何使用它的 Flutter 应用。
默认情况下,插件项目使用 Swift 编写 iOS 代码,使用 Kotlin 编写 Android 代码。如果你更喜欢 Objective-C 或 Java,可以使用 -i
指定 iOS 语言,使用 -a
指定 Android 语言。例如
$ flutter create --template=plugin --platforms=android,ios -i objc hello
$ flutter create --template=plugin --platforms=android,ios -a java hello
步骤 2:实现包
由于插件包包含用多种编程语言编写的多个平台的代码,因此需要一些特定步骤来确保顺畅的体验。
步骤 2a:定义包 API(.dart)
插件包的 API 在 Dart 代码中定义。在你最喜欢的 Flutter 编辑器 中打开 hello/
主文件夹。找到文件 lib/hello.dart
。
步骤 2b:添加 Android 平台代码(.kt/.java)
我们建议你使用 Android Studio 编辑 Android 代码。
然后执行以下步骤
- 启动 Android Studio。
- 在“欢迎使用 Android Studio”对话框中选择“打开一个现有的 Android Studio 项目”,或从菜单中选择“文件 > 打开”,然后选择
hello/example/android/build.gradle
文件。 - 在“Gradle 同步”对话框中,选择“确定”。
- 在“Android Gradle 插件更新”对话框中,选择“不再提醒我此项目”。
插件的 Android 平台代码位于 hello/java/com.example.hello/HelloPlugin
中。
你可以通过按运行(▶)按钮从 Android Studio 运行示例应用。
步骤 2c:添加 iOS 平台代码(.swift/.h+.m)
我们建议你使用 Xcode 编辑 iOS 代码。
在 Xcode 中编辑 iOS 平台代码之前,请先确保代码已构建至少一次(换句话说,从你的 IDE/编辑器中运行示例应用程序,或在终端中执行 cd hello/example; flutter build ios --no-codesign
)。
然后执行以下步骤
- 启动 Xcode。
- 选择 文件 > 打开,然后选择
hello/example/ios/Runner.xcworkspace
文件。
插件的 iOS 平台代码位于项目导航器中的 Pods/Development Pods/hello/../../example/ios/.symlinks/plugins/hello/ios/Classes
。(如果你正在使用 sharedDarwinSource
,路径将以 hello/darwin/Classes
结尾。)
你可以通过按运行 (▶) 按钮来运行示例应用程序。
添加 CocoaPod 依赖项
使用以下说明添加版本为 0.0.1
的 HelloPod
-
在
ios/hello.podspec
的末尾指定依赖项s.dependency 'HelloPod', '0.0.1'
对于私有 Pod,请参阅 私有 CocoaPod 以确保仓库访问权限
s.source = { # For pods hosted on GitHub :git => "https://github.com/path/to/HelloPod.git", # Alternatively, for pods hosted locally # :path => "file:///path/to/private/repo", :tag => s.version.to_s }`
-
安装插件
- 在项目的
pubspec.yaml
依赖项中添加插件。 - 运行
flutter pub get
。 - 在项目的
ios/
目录中,运行pod install
。
- 在项目的
Pod 应出现在安装摘要中。
步骤 2d:添加 Linux 平台代码 (.h+.cc)
我们建议你使用具有 C++ 集成的 IDE 编辑 Linux 代码。以下说明适用于已安装“C/C++”和“CMake”扩展的 Visual Studio Code,但可以针对其他 IDE 进行调整。
在 IDE 中编辑 Linux 平台代码之前,请先确保代码已构建至少一次(换句话说,从你的 Flutter IDE/编辑器中运行示例应用程序,或在终端中执行 cd hello/example; flutter build linux
)。
然后执行以下步骤
- 启动 Visual Studio Code。
- 打开
hello/example/linux/
目录。 - 在询问:
你想配置项目 "linux" 吗?
的提示中选择 是。这将允许 C++ 自动完成工作。
插件的 Linux 平台代码位于 flutter/ephemeral/.plugin_symlinks/hello/linux/
中。
你可以使用 flutter run
运行示例应用程序。注意:在 Linux 上创建可运行的 Flutter 应用程序需要 flutter
工具中包含的步骤,因此即使你的编辑器提供了 CMake 集成,以这种方式进行构建和运行也不会正常工作。
步骤 2e:添加 macOS 平台代码 (.swift)
我们建议你使用 Xcode 编辑 macOS 代码。
在 Xcode 中编辑 macOS 平台代码之前,首先确保代码已构建至少一次(换句话说,从你的 IDE/编辑器运行示例应用程序,或在终端中执行 cd hello/example; flutter build macos
)。
然后执行以下步骤
- 启动 Xcode。
- 选择 文件 > 打开,然后选择
hello/example/macos/Runner.xcworkspace
文件。
插件的 macOS 平台代码位于项目导航器中的 Pods/Development Pods/hello/../../example/macos/Flutter/ephemeral/.symlinks/plugins/hello/macos/Classes
。(如果你正在使用 sharedDarwinSource
,路径将以 hello/darwin/Classes
结尾。)
你可以通过按运行 (▶) 按钮来运行示例应用程序。
步骤 2f:添加 Windows 平台代码 (.h+.cpp)
我们建议你使用 Visual Studio 编辑 Windows 代码。
在 Visual Studio 中编辑 Windows 平台代码之前,首先确保代码已构建至少一次(换句话说,从你的 IDE/编辑器运行示例应用程序,或在终端中执行 cd hello/example; flutter build windows
)。
然后执行以下步骤
- 启动 Visual Studio。
- 选择 打开项目或解决方案,然后选择
hello/example/build/windows/hello_example.sln
文件。
插件的 Windows 平台代码位于解决方案资源管理器中的 hello_plugin/Source Files
和 hello_plugin/Header Files
中。
你可以通过在解决方案资源管理器中右键单击 hello_example
并选择 设为启动项目,然后按运行 (▶) 按钮来运行示例应用程序。重要提示:在对插件代码进行更改后,你必须在再次运行之前选择 生成 > 生成解决方案,否则将运行已构建插件的过时副本,而不是包含你更改的最新版本。
步骤 2g:连接 API 和平台代码
最后,你需要将用 Dart 代码编写的 API 与特定于平台的实现连接起来。这是使用 平台通道 或通过平台界面包中定义的界面来完成的。
在现有插件项目中添加对平台的支持
要在现有插件项目中添加对特定平台的支持,请在项目目录中再次使用 --template=plugin
标志运行 flutter create
。例如,要在现有插件中添加 Web 支持,请运行
$ flutter create --template=plugin --platforms=web .
如果此命令显示有关更新 pubspec.yaml
文件的消息,请按照提供的说明进行操作。
Dart 平台实现
在许多情况下,非 Web 平台实现仅使用上述所示的特定于平台的实现语言。但是,平台实现也可以使用特定于平台的 Dart。
仅限 Dart 的平台实现
在某些情况下,某些平台可以完全使用 Dart 实现(例如,使用 FFI)。对于除 Web 之外的其他平台上的仅限 Dart 的平台实现,请将 pubspec.yaml 中的 pluginClass
替换为 dartPluginClass
。以下是针对仅限 Dart 的实现修改后的上述 hello_windows
示例
flutter:
plugin:
implements: hello
platforms:
windows:
dartPluginClass: HelloPluginWindows
在此版本中,您将没有 C++ Windows 代码,而是使用包含静态 registerWith()
方法的 HelloPluginWindows
类来子类化 hello
插件的 Dart 平台接口类。此方法在启动期间调用,可用于注册 Dart 实现
class HelloPluginWindows extends HelloPluginPlatform {
/// Registers this class as the default instance of [HelloPluginPlatform].
static void registerWith() {
HelloPluginPlatform.instance = HelloPluginWindows();
}
混合平台实现
平台实现还可以同时使用 Dart 和特定于平台的语言。例如,插件可以为每个平台使用不同的平台通道,以便可以根据平台自定义通道。
混合实现使用上面描述的两个注册系统。以下是针对混合实现修改后的上述 hello_windows
示例
flutter:
plugin:
implements: hello
platforms:
windows:
dartPluginClass: HelloPluginWindows
pluginClass: HelloPlugin
Dart HelloPluginWindows
类将使用上面针对仅限 Dart 的实现显示的 registerWith()
,而 C++ HelloPlugin
类将与仅限 C++ 的实现中的类相同。
测试您的插件
我们鼓励您使用自动化测试来测试您的插件,以确保在您对代码进行更改时功能不会退化。
若要详细了解如何测试插件,请查看测试插件。如果您正在为 Flutter 应用编写测试,并且插件导致崩溃,请查看插件测试中的 Flutter。
开发 FFI 插件包
如果您想开发一个使用 Dart 的 FFI 调用原生 API 的包,您需要开发一个 FFI 插件包。
FFI 插件包和(非 FFI)插件包都支持捆绑原生代码,但 FFI 插件包不支持方法通道,并且不包含方法通道注册代码。如果您想实现同时使用方法通道和 FFI 的插件,请使用(非 FFI)插件。您可以选择每个平台使用 FFI 或(非 FFI)插件。
FFI 插件包在 Flutter 3.0 中引入,如果您针对的是较旧的 Flutter 版本,则可以使用(非 FFI)插件。
步骤 1:创建包
要创建一个 FFI 插件包,请使用 flutter create
的 --template=plugin_ffi
标志
$ flutter create --template=plugin_ffi hello
这会在 hello
文件夹中创建一个 FFI 插件项目,其中包含以下专门内容
lib:定义插件 API 的 Dart 代码,并使用 dart:ffi
调用原生代码。
src:原生源代码,以及用于将该源代码构建到动态库中的 CMakeLists.txt
文件。
平台文件夹(android
、ios
、windows
等):用于构建和捆绑原生代码库和平台应用程序的构建文件。
步骤 2:构建和捆绑原生代码
pubspec.yaml
如下指定 FFI 插件
plugin:
platforms:
some_platform:
ffiPlugin: true
此配置调用了各种目标平台的本机构建,并使用这些 FFI 插件将二进制文件捆绑到 Flutter 应用程序中。
这可以与 dartPluginClass
结合使用,例如在联合插件中使用 FFI 实现一个平台时
plugin:
implements: some_other_plugin
platforms:
some_platform:
dartPluginClass: SomeClass
ffiPlugin: true
插件可以同时具有 FFI 和方法通道
plugin:
platforms:
some_platform:
pluginClass: SomeName
ffiPlugin: true
由 FFI(和方法通道)插件调用的本机构建系统是
- 对于 Android:Gradle,它调用 Android NDK 进行本机构建。
- 请参阅
android/build.gradle
中的文档。
- 请参阅
- 对于 iOS 和 macOS:Xcode,通过 CocoaPods。
- 请参阅
ios/hello.podspec
中的文档。 - 请参阅
macos/hello.podspec
中的文档。
- 请参阅
- 对于 Linux 和 Windows:CMake。
- 请参阅
linux/CMakeLists.txt
中的文档。 - 请参阅
windows/CMakeLists.txt
中的文档。
- 请参阅
步骤 3:绑定到本机代码
要使用本机代码,需要在 Dart 中进行绑定。
为了避免手动编写这些代码,它们是由 package:ffigen
从头文件 (src/hello.h
) 生成的。请参阅 ffigen 文档 以了解如何安装此软件包。
通过运行以下命令重新生成绑定
$ dart run ffigen --config ffigen.yaml
步骤 4:调用本机代码
可以从任何隔离区直接调用运行时间非常短的本机函数。有关示例,请参阅 lib/hello.dart
中的 sum
。
应在 辅助隔离区 上调用运行时间较长的函数,以避免在 Flutter 应用程序中丢帧。有关示例,请参阅 lib/hello.dart
中的 sumAsync
。
添加文档
建议将以下文档添加到所有软件包
- 介绍软件包的
README.md
文件 - 记录每个版本变更的
CHANGELOG.md
文件 LICENSE
文件,其中包含软件包授权条款- 所有公开 API 的 API 文档(详情见下文)
API 文档
发布软件包时,API 文档会自动生成并发布到 pub.dev/documentation。例如,请参阅 device_info
的文档。
如果您希望在开发机器上本地生成 API 文档,请使用以下命令
-
将目录更改为软件包所在的位置
cd ~/dev/mypackage
-
告诉文档工具 Flutter SDK 所在的位置(更改以下命令以反映您放置它的位置)
export FLUTTER_ROOT=~/dev/flutter # on macOS or Linux set FLUTTER_ROOT=~/dev/flutter # on Windows
-
按如下方式运行
dart doc
工具(作为 Flutter SDK 的一部分):$FLUTTER_ROOT/bin/cache/dart-sdk/bin/dart doc # on macOS or Linux %FLUTTER_ROOT%\bin\cache\dart-sdk\bin\dart doc # on Windows
有关如何编写 API 文档的提示,请参阅 有效的 Dart 文档。
将许可证添加到 LICENSE 文件
每个 LICENSE 文件中的各个许可证应在其自己的行中用 80 个连字符分隔。
如果 LICENSE 文件包含多个组件许可证,则每个组件许可证都必须以组件许可证适用的软件包名称开头,每个软件包名称在其自己的行中,并且软件包名称列表与实际许可证文本之间用空行分隔。(软件包不必与 pub 软件包的名称匹配。例如,一个软件包本身可能包含来自多个第三方来源的代码,并且可能需要为每个来源包含一个许可证。)
以下示例显示了一个组织良好的许可证文件
package_1
<some license text>
--------------------------------------------------------------------------------
package_2
<some license text>
以下是如何组织良好的许可证文件的另一个示例
package_1
<some license text>
--------------------------------------------------------------------------------
package_1
package_2
<some license text>
以下是如何组织不当的许可证文件的示例
<some license text>
--------------------------------------------------------------------------------
<some license text>
以下是如何组织不当的许可证文件的另一个示例
package_1
<some license text>
--------------------------------------------------------------------------------
<some license text>
发布您的软件包
实施软件包后,您可以在 pub.dev 上发布它,以便其他开发者可以轻松使用它。
在发布之前,请务必查看 pubspec.yaml
、README.md
和 CHANGELOG.md
文件,以确保其内容完整且正确。此外,为了提高软件包的质量和可用性(并使其更有可能获得 Flutter Favorite 的状态),请考虑包括以下内容
- 各种代码使用示例
- 屏幕截图、动画 gif 或视频
- 指向相应代码存储库的链接
接下来,以 dry-run
模式运行发布命令,以查看是否一切通过分析
$ flutter pub publish --dry-run
下一步是发布到 pub.dev,但请务必做好准备,因为 发布是永久的
$ flutter pub publish
有关发布的更多详细信息,请参阅 dart.dev 上的 发布文档。
处理包相互依赖性
如果您正在开发一个依赖于另一个包公开的 Dart API 的包 hello
,则需要将该包添加到 pubspec.yaml
文件的 dependencies
部分。以下代码使 url_launcher
插件的 Dart API 可用于 hello
dependencies:
url_launcher: ^5.0.0
您现在可以在 hello
的 Dart 代码中 import 'package:url_launcher/url_launcher.dart'
和 launch(someUrl)
。
这与您在 Flutter 应用或任何其他 Dart 项目中包含包的方式没有区别。
但是,如果 hello
恰好是一个插件包,其特定于平台的代码需要访问 url_launcher
公开的特定于平台的 API,则还需要向特定于平台的构建文件添加合适的依赖声明,如下所示。
Android
以下示例在 hello/android/build.gradle
中设置了 url_launcher
的依赖项
android {
// lines skipped
dependencies {
compileOnly rootProject.findProject(":url_launcher")
}
}
您现在可以在 hello/android/src
的源代码中 import io.flutter.plugins.urllauncher.UrlLauncherPlugin
并访问 UrlLauncherPlugin
类。
有关 build.gradle
文件的更多信息,请参阅构建脚本的 Gradle 文档。
iOS
以下示例在 hello/ios/hello.podspec
中设置了 url_launcher
的依赖项
Pod::Spec.new do |s|
# lines skipped
s.dependency 'url_launcher'
您现在可以在 hello/ios/Classes
的源代码中 #import "UrlLauncherPlugin.h"
并访问 UrlLauncherPlugin
类。
有关 .podspec
文件的更多详细信息,请参阅 CocoaPods 文档。
网络
所有网络依赖项都由 pubspec.yaml
文件处理,就像任何其他 Dart 包一样。