Flutter Package 開發、發佈、使用三部曲

前言: 批改移動端在此次重構的時候,技術選型上我們團隊選擇了Flutter來進行本次移動端的重構,因爲使用Flutter可以在UI的開發效率上充分節省人效,可以把更多的時間放在其他方面的研究上。但是在實際開發中,有部分的功能Flutter是不支持的,還需要native端來進行支持,而如何使native端支持的功能可以方便的、高效的服務於我們自己的同時又可以對外提供便利,在其他項目或者是其他團隊在需要使用同樣功能的時候可以不需要重複的造輪子,如Java的jar包,Android的aar包,Web的npm包, iOS的pod包等,而在Flutter中,Flutter也是支持使用由其他開發者貢獻給Flutter和Dart生態系統的共享軟件包,使我們可以快速構建應用程序,而無需從頭開始開發所有應用程序,這就是我們今天要介紹的Package。

所以針對package的瞭解上就不能僅僅止步於會使用的層次,更需要了解如何開發一個屬於自己的package以及如何將自己的package成功發佈到pub倉庫或者是私有倉庫供他人使用。

##01 package介紹 什麼是Package

使用Package可以創建能輕鬆共享的模塊化代碼,而一個最小的Package包括: 一個pubspec.yaml文件:聲明瞭package的名稱、版本、作者等的元數據文件。 一個 lib 文件夾:包括包中公開的(public)代碼,最少應有一個<package-name>.dart文件。 Package類型:

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之間的通信原理此篇文章我們不深入討論,通信原理可以參考下圖:

02 package 開發

我們瞭解到了Package是什麼之後,那如何開發我們自己的package包呢? 創建一個包或者是插件一般有兩種方式:

  • 可視化方式
  • 命令行方式 可視化方式
  • 打開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包 包含的文件:

  • 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發佈位置可以選擇:**

  • pub.dev
  • 私有pub倉庫(集團pub倉庫)
  • git倉庫 在發佈package之前,要先檢查這幾個文件:pubspec.yaml、README.mdCHANGELOG.md 確保這幾個文件完整。
  • pubspec.yaml配置文件的配置:
  1. name: xxxx ## pub庫名稱
  2. version: 0.0.1 ## 當前插件版本 確保每次發佈與之前的版本不一致
  3. description: xxxxxxxxx ## pub庫簡介
  4. homepage:https://github.com/xxxx ## pub庫git地址
  5. publish_to:http://pub.100tal.com/ ## 私有pub庫上傳地址 如果不是私有pub倉庫 不用配置
  6. author:xxx[email protected] ## pub庫作者
  • 檢測配置文件: flutter packages pub publish --dry-run
  • 發佈 flutter packages pub publish

04 package 使用

package包發佈成功之後,我們該如何在項目中使用呢? 首先是在pubSpec.yaml中添加依賴

  • 依賴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打開去驗證。

  • 驗證通過-開始上傳-上傳成功去 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日世界讀書日,微信公衆號免費送書啦~
掃碼關注「好未來技術」微信公衆號回覆「送書」即可參與本次活動
專屬寵粉福利,還在等什麼快來關注吧


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章