Flutter 中文文檔:Packages 的開發和提交

2021-02-19 Flutter社區

1. Package 介紹
通過使用 packages (的模式)可以創建易於共享的模塊化代碼。一個最基本的 package 由以下內容構成:

備忘

有關編寫高效插件的注意事項列表,請參考 Medium 上的文章:Writing a good plugin。

連結:

https://medium.com/flutter/writing-a-good-flutter-plugin-1a561b986c9c

1.1 Package 類別

Package 包含以下兩種類別:

純 Dart 庫:用 Dart 編寫的傳統 package,比如 path。其中一些可能包含 Flutter 的特定功能,因此依賴於 Flutter 框架,其使用範圍僅限於 Flutter,比如 fluro。

原生插件:使用 Dart 編寫的,按需使用 Java 或 Kotlin、ObjC 或 Swift 分別在 Android 和/或 iOS 平臺實現的 package。一個具體的例子是 battery。

步驟1:創建 package

想要創建純 Dart 庫的 package,請使用帶有 --template=package 標誌的 flutter create 命令:

這將在 hello/ 目錄下創建一個 package 項目,其中包含以下內容:

lib/hello.dart

package 的 Dart 實現代碼。

test/hello_test.dart

Package 的 單元測試。

對於純 Dart 庫的 package,只要在 lib/<package name>.dart 文件中添加功能實現,或在 lib 目錄中的多個文件中添加功能實現。如果要對 package 進行測試,在 test 目錄下添加 單元測試。如果想要開發一個調用特定平臺 API 的 package,你需要開發一個原生插件 packgae。原生插件 packgae 是 Dart package 的特別版本,除了要實現 Dart package 要實現的內容,還需要按需使用 Java 或 Kotlin、ObjC 或 Swift 分別在 Android 和/或 iOS 平臺實現,你可以使用 platform channel 中的 API 來實現特定平臺的調用。https://flutter.cn/docs/development/platform-integration/platform-channels想要創建原生插件 package,請使用帶有 --template=plugin 標誌的 flutter create 命令。使用 --org 選項,以反向域名表示法來指定你的組織。該值用於生成的 Android 及 iOS。

這將在 hello/ 目錄下創建一個插件項目,其中包含以下內容:android/src/main/java/com/example/hello/HelloPlugin.kt:ios/Classes/HelloPlugin.m:一個依賴於該插件並說明了如何使用它的 Flutter 應用。默認情況下,插件項目中 iOS 代碼使用 Swift 編寫,Android 代碼使用 Kotlin 編寫。如果你更喜歡 Objective-C 或 Java,你可以通過 -i 指定 iOS 所使用的語言和/或使用-a 指定 Android 所使用的語言。比如:

由於原生插件類型的 package 包含了使用多種程式語言編寫的多個平臺代碼,因此需要一些特定步驟來保證體驗的流暢性。步驟 2a:定義 package API(.dart)原生插件類型 package 的 API 在 Dart 代碼中要首先定義好,使用你鍾愛的 Flutter 編輯器,打開 hello/ 主目錄,並找到 lib/hello.dart 文件。步驟 2b:添加 Android 平臺代碼(.java/.kt)我們建議你使用 Android Studio 來編輯 Android 代碼。使用 Android Studio 編輯 Android 平臺代碼之前,首先確保代碼至少被構建過一次(換句話說,即從 IDE/編輯器執行示例程序,或在終端中執行以下命令:cd hello/example; flutter build apk)。(2)在「Welcome to Android Studio」對話框中選擇「Import project」,或在菜單中選擇「File > New > Import Project…」,然後選擇 hello/example/android/build.gradle 文件;(3)在「Gradle Sync」對話框中,選擇「OK」;(4)在「Android Gradle Plugin Update」對話框中,選擇「Don’t remind me again for this project」。插件的 Android 平臺代碼位於 hello/java/com.example.hello/HelloPlugin。你可以在 Android Studio 中點擊 ▶ 按鈕來運行示例程序。步驟 2c:添加 iOS 平臺代碼(.h+.m/.swift)我們建議你使用 Xcode 來編輯 iOS 代碼。使用 Xcode 編輯 iOS 平臺代碼之前,首先確保代碼至少被構建過一次(即從 IDE/編輯器執行示例程序,或在終端中執行以下命令:cd hello/example; flutter build ios --no-codesign)。(2)選擇「File > Open」,然後選擇 hello/example/ios/Runner.xcworkspace 文件。插件的 iOS 平臺代碼位於項目導航中的 Pods/Development Pods/hello/Classes/。步驟 2d:關聯 API 和平臺代碼最後,你需要將 Dart 編寫的 API 代碼與特定平臺的實現相互關聯。(1)README.md 文件用來對 package 進行介紹(2)CHANGELOG.md 文件用來記錄每個版本的更改(3)LICENSE 文件用來闡述 package 的許可條款(4)API 文檔包含所有的公共 API(詳情參見下文)當你提交一個 package 時,會自動生成 API 文檔並將其提交到 dartdocs.org,示例請參見 device_info docs如果你希望在本地開發環境中生成 API 文檔,可以使用以下命令:(1)將當前工作目錄切換到 package 所在目錄:

cd ~/dev/mypackage

(2)告知文檔工具 Flutter SDK 所在位置(更改以反應它所在的位置):

export FLUTTER_ROOT=~/dev/flutter(適用於 macOS 或 Linux 作業系統)

set FLUTTER_ROOT=~/dev/flutter(適用於 Windows 作業系統)

(3)運行 dartdoc 工具(作為 Flutter SDK 的一部分):

$FLUTTER_ROOT/bin/cache/dart-sdk/bin/dartdoc(適用於 macOS 或 Linux 作業系統)

%FLUTTER_ROOT%\bin\cache\dart-sdk\bin\dartdoc(適用於 Windows 作業系統)

每個 LICENSE 文件中的各個許可證應由 80 個短線字符組成的線段進行分割。如果 LICENSE 文件中包含多個組件許可證,那麼每個組件許可證必須以其所在 package 的名稱開始,每個 package 名稱單獨一行顯示,並且 package 名稱列表與實際許可證內容由空行隔開。(package 名稱無需與 pub package 相匹配。比如,一個 package 可能包含多個第三方代碼,並且可能需要為每個 package 添加許可證。)

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>

一旦完成了 package 的實現,你便可以將其提交到 pub.dev 上,以便其他開發者可以輕鬆地使用它。提交之前,請確保 pubspec.yaml、README.md 以及 CHANGELOG.md 文件已被審查,以保證其內容的完整性和正確性。接下來,運行 dry-run 命令以檢驗是否所有內容都通過了分析:

如果你正在開發的 hello 依賴於另外一個 package 所公開的 Dart API,你需要將該 package 添加到文件 pubspec.yaml 的 dependencies 段中。以下代碼使得插件 url_launcher 的 Dart API 在 hello 中可用:在 hello/pubspec.yaml 文件中:

dependencies:
  url_launcher: ^0.4.2

現在你可以在 hello 的 Dart 代碼中使用 import 'package:url_launcher/url_launcher.dart' 和 launch(someUrl)。
這與你在 Flutter 應用或其他任何 Dart 項目中引入 package 的方式沒什麼區別。但碰巧 hello 是一個 原生插件 package,其特定的平臺代碼如果需要訪問 url_launcher 所公開的平臺特定 API,那麼還需要為特定平臺的構建文件添加適當的依賴說明,如下所示:在 hello/android/build.gradle 文件中:

android {
    
    dependencies {
        provided rootProject.findProject(":url_launcher")
    }
}

現在你可以在 hello/android/src 目錄下的原始碼文件中使用 import io.flutter.plugins.urllauncher.UrlLauncherPlugin 並訪問類 UrlLauncherPlugin。在 hello/ios/hello.podspec 文件中:

Pod::Spec.new do |s|
  
  s.dependency 'url_launcher'

現在你可以在 hello/ios/Classes 目錄下的原始碼文件中使用 #import "UrlLauncherPlugin.h" 並訪問 UrlLauncherPlugin 這個類了。

相關焦點

  • 谷歌Flutter 1.7正式發布:支持AndroidX和Android App Bundles
    支持 AndroidXAndroidX 是 Android 團隊用於在 Jetpack 中開發、測試、打包和發布庫以及對其進行版本控制的開源項目目前 AndroidX 已經穩定,很多 Flutter packages 已經更新和支持它,Flutter 現在可以支持創建一個 AndroidX 項目 (new Flutter project with AndroidX) 了,這也減少了與 Android 生態系統集成您所需要做的工作。
  • Flutter 中文文檔:Widget 測試介紹
    在 Flutter 中文文檔:單元測試介紹 部分,我們學習了使用 test 這個 package 測試 Dart 類的方法。
  • 為什麼我們應該使用 Flutter? - CSDN
    感興趣的同學可以關注 GitHub:https://github.com/flutter/flutterFlutter 的優勢相比較目前的混合開發方案,Flutter 提供了大量的文檔,能非常快速且友好的讓你加入到這個大家庭。
  • Flutter 中文文檔:定位到目標 widgets
    我們可以編寫自己的 finderclasses,不過通常使用 flutter_test 包提供的工具來定位 widgets 更加方便。下面,我們來看看 flutter_test 包提供的 find 常量並演示如何使用其所提供的 Finders。
  • Flutter Go首頁、文檔和下載 - Flutter 學習 App - OSCHINA
    考慮到 Flutter 未來的變化和策略的可變性, roadmap 不排除有一定調整,但總體不會變化太大。Flutter 是什麼?2018年6月21日Google發布Flutter首個release預覽版,作為Google 大力推出的一種全新的響應式,跨平臺,高性能的移動開發框架。Flutter是一個跨平臺的移動UI框架,旨在幫助開發者使用一套代碼開發高性能、高保真的Android和iOS應用。
  • 使用Flutter一年後,這是我得到的經驗
    例如,為了在我的應用程式中集成 Mixpanel(因為它們提供了一個免費套餐選項和一個非常簡單清晰的 UI),我不得不開發我自己的庫 pure_mixpanel(https://pub.dartlang.org/packages/pure_mixpanel)。這不是什麼大不了的事情,實際上它很有趣。
  • 適用於 Flutter 的 Google 移動廣告 SDK 正式版現已發布
    在用戶與應用交互時,這些廣告可以錨定在屏幕的頂部或底部,也可以嵌入到用戶滾動的內容中。除了標準固定尺寸的橫幅廣告,我們還支持自適應的橫幅廣告,它會基於設備的寬度和高度選擇最佳的橫幅尺寸。插頁式廣告 (Interstitial Ads): 覆蓋應用整個屏幕的全屏廣告。這些廣告適合放置在應用的自然停頓點或轉場中。
  • 使用 Flutter 開發 Mac 桌面應用
    Flutter 可以開發 Mac,Linux,Windows 桌面,但是對於平臺目前只能打對於的包,以及調試本平臺的包。
  • 解決flutter運行報錯:flutter_tools depends的處理方法
    我是您的朋友義縣遊學電子科技.今天帶來的flutter的錯誤解決方法是關於web平臺運行時提示:"Because flutter_tools depends on shelf_packages_handler any which doesn't exist(could
  • 期待已久,Flutter 1.2 正式發布!
    有興趣的開發者們可以前往 Flutter wiki 頁面,查看完整的請求列表。另外,我們還在這次更新中加強了對 Swahili 等新 UI 設計語言的支持。我們將繼續改進 Material 和 Cupertino 系列的 widgets,為開發者提供更加靈活的 Material 設計體驗,並在 iOS 設備上實現完美的像素保真度。
  • Flutter狀態State的5種應對方法
    (https://riverpod.dev/)Riverpod 是 Remi Rousselet 創建的一個相當新的庫,也是他對自己另一個庫 provider(https://pub.dev/packages/provider)遇到的一些最常見問題的直接回應,其中很重要的一個問題是當開發人員無法提供依賴項時會引發 ProviderNotFound 異常。
  • Flutter 入門路線圖
    什麼是 flutterFlutter 是 Google 的 UI 工具包,可通過單個代碼庫為行動裝置,web 和桌面系統構建漂亮的,本機編譯的應用程式。查看 Flutter 的功能以下是全球開發人員構建的 Flutter 應用程式的展示。
  • Flutter 要起飛 , Flutter 1.12 正式發布回顧!
    使用 Flutter Web 和 Flutter MacOS 需要通過如下命令行打開配置,並且執行 flutter create xxxx 就可以創建帶有 Web 和 MacOS 的項目(如果已有項目也可以執行 flutter create 補全),並且需要注意調試 MacOS 平臺應用需要本地 Flutter SDK 要處於 master 分支,如果僅測試 Web 可以使用 beta
  • Flutter 1.7 版正式發布
    同時,你可以通過《在 Windows 作業系統上安裝和配置 Flutter 開發環境》、《在 macOS 上安裝和配置 Flutter 開發環境》、《在 Linux 作業系統上安裝和配置 Flutter 開發環境》查看如何新安裝 Flutter。
  • 在 macOS 上安裝和配置 Flutter 開發環境
    開發二進位文件預下載(可選操作)flutter 命令行工具會下載不同平臺的開發二進位文件,如果需要一個封閉式的構建環境,或在網絡可用性不穩定的情況下使用等情況,你可能需要通過下面這個命令預先下載 iOS 和 Android 的開發二進位文件:$ flutter precache更多使用方式,請使用 flutter help precache
  • Flutter實現國際化
    國際化的認識 開發一個App,如果我們的App需要面向不同的語種(比如中文、英文、繁體等),那麼我們需要對齊進行國際化開發。在中文環境下,應該顯示中文(比如彈出的時間選擇器);國際化二.dart和arb轉換3.2. intl package官方文檔推薦可以使用intl package來進行arb和dart文件之間的轉換(通過終端指令)https://flutter.dev
  • Flutter doctor 命令,解決Flutter開發環境疑難雜症,建議收藏
    技術剛剛好經歷近幾年,移動端跨平臺開發技術層出不窮,從Facebook家的ReactNative,到阿里家WEEX,前端技術在移動端跨平臺開發中大展身手,技術剛剛好作為一名Android開發,經歷了從Reactjs到Vuejs的不斷學習。而在2018年,我們的主角變成了Flutter,這是Goolge開源的一個移動端跨平臺解決方案,可以快速開發精美的移動App。
  • 使用 Flutter 開發 Github 客戶端及學習歷程的小結
    第一周:初識Flutter最初學習Flutter的方式是通過學習 wendux 老師的 《Flutter實戰》:https://book.flutterchina.club/這是一本非常優秀的中文Flutter教程,對個人學習Flutter入門有非常大的幫助。
  • Flutter 中文文檔:點擊、拖拽事件和文本輸入
    常見的交互有用戶點擊按鈕、在屏幕上拖動組件和在 TextField 中輸入文本。為了測試這些交互,我們需要在測試環境中模擬上述場景,可以藉助 flutter_test 庫中的 WidgetTester 類來實現。WidgetTester 提供了文本輸入、點擊、拖動的相關方法:在很多情況下,用戶交互會更新應用狀態。
  • 5分鐘學會Flutter開發
    )1.4 開發工具1.Widget 是 Flutter 功能的抽象描述,是視圖的配置信息,同樣也是數據的映射,是 Flutter 開發框架中最基本的概念。兩個比較重要的Widget:StatelessWidget和StatefulWidget。