课程名称:Flutter从入门到进阶 实战携程网App 一网打尽核心技术
课程章节:Flutter进阶拓展:开发包和插件开发
课程讲师:CrazyCodeBoy
课程内容
Flutter 中的插件有两种:package 和 plugin。
- Package 是纯 dart 代码的库,不涉及原生平台的代码;
- Plugin 是原生插件库,是一种特殊的 Package,Plugin 需要开发者分别在各原生平台实现对应的功能。插件包适合封装 Native API 给 Flutter 调用。
插件创建
Flutter 插件可以通过 Android Studio 创建(需要在 Android Studio 中先安装 Dart 和 Flutter 插件),或者使用命令行创建。
创建 Dart 包
使用–template=package 声明创建的是只包含 dart 代码的 package。
flutter create --template=package hello
生成的目录介绍:
- lib 目录用于存放 package 的代码实现,Flutter会自动生成一个与package同名的dart文件。
- pubspec.yaml,项目所依赖的package或者plugin都需要在该文件中声明。
- CHANGELOG.md,版本说明文档
- LICENSE 版权协议说明,如果没有这个LICENSE,那么你的项目默认为独家版权,别人是不能碰你的项目的。只有当你创建了LICENSE,并在LICENSE之中声明了开源许可证之后,你的项目才是开源的。
- README.md,项目的使用文档
- test 单元测试的目录
创建 Flutter 插件
- 使用–template=plugin 声明创建的是同时包含了 iOS 和 Android 代码的 plugin;
- 使用–org 选项指定组织,一般采用反向域名表示法;
- 使用-i 选项指定 iOS 平台开发语言,objc 或者 swift;
- 使用-a 选项指定 Android 平台开发语言,java 或者 kotlin。
flutter create --template=plugin --org com.baidu -i objc -a java flutter_plugin_demo
相比 Package,Plugin 多出了一些目录:
- android 目录用于 Android 平台的代码实现;
- ios 目录用于 iOS 平台的代码实现;
- example 目录用于该组件的调试。
插件开发
Plugin 和 Package 的开发和发布流程基本一致,相比之下 Plugin 还涉及到 iOS 和 Android 的开发,实现起来要更加复杂一些。创建好的插件项目中已经为我们实现好了一个获取平台系统版本号的插件类。
Android平台开发
通过 flutter build 命令构建 Android 端代码:
cd flutter_plugin_demo/example/
flutter build apk
构建完成后,可以在编辑器中看到一个名为 FlutterPluginDemoPlugin.java 的文件,通过对该类的开发完成Android端插件功能。
iOS平台开发
通过 flutter build 命令构建 iOS 端代码:
cd flutter_plugin_demo/example/
flutter build apk
构建完成后,可以在编辑器中看到一个名为 FlutterPluginDemoPlugin.m 的文件,通过对该类的开发完成iOS端插件功能。
插件发布
当插件开发测试完成以后,就可以把插件发布出去了。 在发布之前,先检查pubspec.yaml, README.md和CHANGELOG.md这几个文件的内容是否完整正确。然后运行下面这个命令检查插件是否可以发布。
flutter packages pub publish --dry-run
如果有问题存在的话,会在终端输出相关信息,你需要据此做出修改直到返回成功。最后去掉–dry-run以后再运行以上命令,发布插件。
flutter packages pub publish
插件使用
插件开发完成后,有三种方式可以使用:
1. 将插件发布到pub上,就可以使用常规的引用方式。
在项目的 pubspec.yaml 文件中直接添加依赖。
dependencies:
dio: 2.1.x
2. 将插件项目上传到 git,通过指定 git 地址的方式引用。
dependencies:
dio:
git:
url: git://github.com/flutterchina/dio.git
3. 通过相对路径的方式引用本地插件。
dependencies:
flutter_plugin_demo:
path: ../
课程总结
Flutter 插件开发的流程与 Android 中插件开发的步骤大致相同,Flutter 目前移动端的插件比较丰富,相对桌面端的开发,很多功能都需要开发人员自己实现,这时可以考虑通过插件的形式对项目进行重构。