3.5 插件开发
至此,准备工作都已就绪,你可以把这个项目当做一个独立的Android项目,在上面进行各种封装操作,然后在FlutterTestPlugin文件下,将接口暴露出来。通过platform channels与flutter层关联起来。
4. 发布
当插件开发完毕,可以将插件发布让其他人使用,在发布之前,确保pubspec.yaml,、README.md以及CHANGELOG.md文件的内容都正确填写完毕。可以通过dry-run命令来看准备是否就绪。
flutter packages pub publish --dry-run
检查无误后,可以执行下面的命令,发布到Pub上。
flutter packages pub publish
5. 如何引用
对插件的引用有两种,已经发布的和未发布的。
5.1 引用发布的库
flutter项目的很多资源管理都在根目录的pubspec.yaml下面,类似于js中的一些包管理一样,在dependencies
加上我们需要引入的库,例如引入url_launcher库:
dependencies:
url_launcher: ^0.4.2
如果这个库包含了一些平台相关的东西,例如需要在native层进行使用的话,则需要在对应的native项目单独做引用。
5.1.1 Android
修改android/build.gradle的dependencies处做引用:
dependencies {
provided rootProject.findProject(":url_launcher")
}
5.1.2 iOS
修改ios/hello.podspec文件
Pod::Spec.new do |s|
# lines skipped
s.dependency 'url_launcher'
5.1.3 引用冲突
引用不同的库可能会导致一些冲突,例如A和B两个插件,都包含了C插件,但是所需的版本不同。因此我们可以采取以下措施避免这种问题:
- 尽量使用范围版本而不是指定一个特定的版本。
- 强制统一冲突的插件版本
- 对于native层,android可以通过force命令强制指定版本,而iOS这边,Cocoapods则不支持引用的override功能。
5.2 引用未发布的库
引用未发布的库有两种方式,通过本地路径和git地址的方式:
5.2.1 基于Path的引用方式:
这种方式主要针对本地的未发布的库,引用的路径可以是相对或者绝对路径。
dependencies:
plugin1:
path: ../plugin1/
5.2.2 基于Git的引用方式:
这种方式针对存放在git上的库,其中path是可选的,可以定位到某个子目录
dependencies:
package1:
git:
url: git://github.com/flutter/packages.git
path: packages/package1
6. 后话
笔者建了一个Flutter学习相关的项目,Github地址,里面包含了笔者写的关于Flutter学习相关的一些文章,会定期更新,也会上传一些学习Demo,欢迎大家关注。
7. 参考
- Flutter进阶—平台插件
- Flutter - Creating a Plugin
- Flutter for Android Developers
- Writing custom platform-specific code with platform channels
- Developing Packages & Plugins
- Using Packages