之前一直想找個機會介紹Flavors,這次因為重構地圖部分,乾脆順便做個小教學。

flutter_flavorizr: ^2.2.3

同樣的在開始之前我一樣會先確認當前環境,Flutter雖然已經進入算是穩定期,比較少去大幅修改架構,不過以防萬一,有可能你看到這篇文章時已經過時了:

Name Version
Flutter Version v3.16.4
Flavorizr v2.2.3

初始化

這個套件主要幫助你區分不同的環境,產品上線後會面臨幾個問題

  • 修改線上的錯誤,開個hotfix
  • 跳脫版本線上版本開新的功能
  • 開啟新的版本,開發新的Sprint
  • 需要測試版本進行效能調校

這時我們需要針對不同的production, staging, testing, development分支進行處理,但光靠一個設定檔有時會不太好管理,過去我們會嘗試透過多個main file去處理,但這次我們可以使用Flavors去達成相同效果。

首先我們打開pubspec.yaml,並進行安裝pub get

1
2
dev_dependencies:
flutter_flavorizr: ^2.2.3

接著我們在Flutter資料夾內建立一個Flavors的設定檔(flavorizr.yaml),內部放置各種不同的版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
flavors:
production:
app:
name: "MapsWalker"
android:
applicationId: "com.piewalker.mapswalker"
ios:
bundleId: "com.piewalker.mapswalker"

staging:
app:
name: "MapsWalker Staging"
android:
applicationId: "com.piewalker.mapswalker"
ios:
bundleId: "com.piewalker.mapswalker"

development:
app:
name: "MapsWalker Devlopment"
android:
applicationId: "com.piewalker.mapswalker"
ios:
bundleId: "com.piewalker.mapswalker"

完成之後我們可以執行flutter pub run flutter_flavorizr來讓他產生相關的設定檔,接著他就會在lib新增一些資料。

除此之外這邊會依照所有設定去產生相對應的設定,不過如果想要指定特定的處理可以透過-p or --processors來指定想要的內容:

例如: -p ios:icons or -p ios:launchScreen or -p google:firebase,assets:clean,接著就能盡量避免取代掉原本的內容。

執行

我們可以看到他針對我們新增的參數分別新增了production, staging and development並且預先寫了一些範例在內部。

如果要開啟不同的版本,可以透過下方指令:

1
2
3
4
5
6
7
8
flutter run --flavor <上方設定的名字> -t lib/main_xxxx.dart

// 加上-t主要有時我們會因為架構去調整設定檔的位子,此時可以透過-t去指定位置
// 如果要省下麻煩,iOS可以把-t忽略,他會從lib目錄裡去尋找指定的檔案。
// 但Android目前好像還是會找不到,導致需要透過-t去指定。
flutter run --flavor development -t lib/main_development.dart
// or
flutter run --flavor development

透過上方的方法就能輕鬆區別不同環境,下次我想想也許會再重新講解有關於Firebase的事情,畢竟有蠻多重大的更新,

那我們就下次見!感謝閱讀。