前言: 批改移动端在这次重构的时候,技术选型上咱们团队选择了Flutter来进行本次移动端的重构,由于使用Flutter能够在UI的开发效率上充分节省人效,能够把更多的时间放在其余方面的研究上。可是在实际开发中,有部分的功能Flutter是不支持的,还须要native端来进行支持,而如何使native端支持的功能能够方便的、高效的服务于咱们本身的同时又能够对外提供便利,在其余项目或者是其余团队在须要使用一样功能的时候能够不须要重复的造轮子,如Java的jar包,Android的aar包,Web的npm包, iOS的pod包等,而在Flutter中,Flutter也是支持使用由其余开发者贡献给Flutter和Dart生态系统的共享软件包,使咱们能够快速构建应用程序,而无需从头开始开发全部应用程序,这就是咱们今天要介绍的Package。java
因此针对package的了解上就不能仅仅止步于会使用的层次,更须要了解如何开发一个属于本身的package以及如何将本身的package成功发布到pub仓库或者是私有仓库供他人使用。linux
##01 package介绍 什么是Packageandroid
使用Package能够建立能轻松共享的模块化代码,而一个最小的Package包括: 一个pubspec.yaml文件:声明了package的名称、版本、做者等的元数据文件。 一个 lib 文件夹:包括包中公开的(public)代码,最少应有一个<package-name>.dart文件。 Package类型:ios
Flutter Package(dart包):Flutter纯Dart插件工程,仅包含Dart层的实现,每每定义一些公共Widget Flutter Plugin(插件包):一种专用的Dart包,其中包含用Dart代码编写的API,以及针对Android(使用Java或Kotlin)和针对iOS(使用OC或Swift)平台的特定实现 Plugin其实就是一个特殊的Package。Flutter Plugin提供Android或者iOS的底层封装,在Flutter层提供组件功能,使Flutter能够较方便的调取Native的模块。不少平台相关性或者对于Flutter实现起来比较复杂的部分,均可以封装成Plugin 。Flutter与native之间的通讯原理此篇文章咱们不深刻讨论,通讯原理能够参考下图: git
02 package 开发
咱们了解到了Package是什么以后,那如何开发咱们本身的package包呢? 建立一个包或者是插件通常有两种方式:github
- 可视化方式
- 命令行方式 可视化方式
- 打开Android Studio -> 选择Create New Flutter Project;
- 若是想要建立插件包 则选择Flutter Plugin;
- 若是想要建立Dart包 则选择Flutter Package;
- 根据须要修改相关内容,而后点击Next;
- 根据须要修改package name以及选择package开发中须要的语言 (选择pulgin包才会有此步骤)
- 建立成功 命令行方式
- 建立Dart包 flutter create --template=package dartPackageNam
- 建立plugin包 flutter create --org com.example --template=plugin --platforms=android,ios -a kotlin -i swift pluginPackageName 参数: --org:指定您的组织,使用反向域名表示法 --template: 指定是纯Dart包仍是Plugin包 --platforms: 表明指定插件支持的平台 可用的平台有:android、ios、web、linux、macos 和windows -a 指定Android平台所使用的语言 java、kotlin -i 指定iOS平台所支持的语言 objc、swift
**Package包建立成功以后,查看工程下的文件: ** 纯Dart包 包含的文件:web
- LICENSE 文件 # 许可证文件。
- test/flutter_package_first_test.dart文件 ## Package 的 单元测试 文件。
- .gitignore 文件 ## 告诉 git 系统应该隐藏哪些文件或文件夹的一个隐藏文件。
- pubspec.yaml 文件 ## pub 工具须要使用的,包含 package 依赖的 yaml 格式的文件。
- README.md 文件 ## 起步文档,用于描述 package。
- lib/flutter_package_first.dart 文件 ## package 的 Dart 实现代码
- CHANGELOG.md 文件 ## 用于记录 package 的版本变动
Plugin包 包含的文件:
- lib/flutter_plugin.dart 文件 ## Dart 插件 API 实现。
- android/src/main/java/com/example/flutter_plugin/FlutterPlugin 文件 ## Android 平台原生插件 API 实现(使用 Kotlin 编程语言)。
- ios/Classes/FlutterPlugin.m 文件 ## iOS 平台原生插件 API 实现(使用 Objective-C 编程语言)。
- example/ 文件 ## 一个依赖于该插件并说明了如何使用它的 Flutter 应用。
若是要编辑iOS目录下相关文件或者是Android目录下的相关文件 须要去特定的编辑器中打开各端的文件进行编辑
- iOS端:
- Android端:
03 package 发布
咱们已经了解了package包是什么,以及如何制做不一样的package包,那如何发布Package包呢?(集团pub仓库发布文档) ** package发布位置能够选择:**chrome
- pub.dev
- 私有pub仓库(集团pub仓库)
- git仓库 在发布package以前,要先检查这几个文件:pubspec.yaml、README.md、CHANGELOG.md 确保这几个文件完整。
- pubspec.yaml配置文件的配置:
- name: xxxx ## pub库名称
- version: 0.0.1 ## 当前插件版本 确保每次发布与以前的版本不一致
- description: xxxxxxxxx ## pub库简介
- homepage:https://github.com/xxxx ## pub库git地址
- publish_to:http://pub.100tal.com/ ## 私有pub库上传地址 若是不是私有pub仓库 不用配置
- author:xxxxxx@100tal.com ## pub库做者
- 检测配置文件: flutter packages pub publish --dry-run
- 发布 flutter packages pub publish
04 package 使用
package包发布成功以后,咱们该如何在项目中使用呢? 首先是在pubSpec.yaml中添加依赖macos
- 依赖pub.dev仓库的package包 #实例1 在该项目中,此插件指定版本为1.4.0 flutter_plugin: ^1.4.0 #实例2 在该项目中,此插件最低版本为1.2.3 flutter_plugin: ">=1.2.3" #实例3 在该项目中,此插件最低支持2.0.0版本,但不支持3.0.0以上版本 flutter_plugin: ">=2.0.0 <3.0.0" #实例4 在该项目中,此插件最高支持到1.2.3如下版本
flutter_plugin: "<1.2.3" - 依赖git仓库的package包
- flutter_plugin:
- git: url: https://github.com/xxxxxx/xxxxxx.git #git仓库地址
- path: xxxxx #若是项目不是在git地址的根目录 则须要指定path
- ref: ‘1.0.0' #指定的版本 对应git仓库中的tag标签 也能够指定分支 ref: some-branch
- 依赖私有pub仓库的package包 xes_recorder: hosted: name: xes_recorder url: http://pub.100tal.com version: 0.0.1
- 依赖本地package flutter_pub: path: ../ #能够是相对路径 也能够是绝对路径
05 发布过程当中可能会遇到的问题记录
1)author 在最新版本进行‘flutter packages pub publish --dry-run’检测的时候 会报警告 须要移除掉才能检测经过。 2)执行发布命令的时候 会遇到须要登陆如下地址去受权的状况 须要登陆google帐号 请使用chrome打开去验证。 npm
- 验证经过-开始上传-上传成功去 pub.dev 或者本身的私有pub仓库 查看是否发布成功 。
- 验证成功-开始上传-若是超时未成功则须要绕过google受权从新上传。 3)跳过google验证方法;
- 下载pub项目[下载地址:https://github.com/ameryzhu/pub]
- 使用Android Studio打开下载的项目 并在Terminal顺序执行: pub get; dart--snapshot=mypub.dart.snapshot bin/pu b.dart #执行完这个命令会在pub项目根目录下生成一个mypub.dart.snapshot文件 ;
4)把这个文件放到 ${flutterSDK Path}/bin/cache /dart-sdk/bin/snapshots/ 目录下; 5)而后用编辑器打开${flutterSDKPath}/bin/cache /da rt-sdk/bin/pub 文件; 6)把文件倒数第三行的:pub.dart.snapshot 替换为 mypub.dart.snapshot ; 7)保存-退出 8)从新执行发布命令 若是执行了上述方法,在项目中执行pub get的时候会有版本冲突的错误,须要将上述方法修改的pub文件中的 mypub.dart.snapshot 恢复改成pub.dart.snaps hot 。
4月23日世界读书日,微信公众号免费送书啦~
扫码关注「好将来技术」微信公众号回复「送书」便可参与本次活动
专属宠粉福利,还在等什么快来关注吧