Flutter 實現根據環境載入不同配置
阿新 • • 發佈:2018-12-09
之前做後端開發的時候,不管是什麼語言或者框架,都習慣根據不同環境載入不同的開發配置,比如本地開發的時候,載入local.env配置,部署開發環境的時候載入develop.env配置,通常通過一個環境變數來決定載入相應的配置。最近在開發一款Flutter App,我也希望App在不同的環境中載入不同的配置檔案,實現的方式如下,如有不妥還請指出。
首先在lib
建立多個main.dart
,比如main_local.dart
表示本地開發執行時執行的入口檔案,main_develop.dart
和main.dart
分別表示開發環境和生產環境:
lib/ ├── api/ ├── main.dart ├── main_develop.dart ├── main_local.dart ├── models/ ├── pages/ ├── utils/ └── widgets/
這樣如果我們執行在本地開發,那麼執行
flutter run -t lib/main_local.dart
那麼如何在執行本地開發環境的時候來呼叫本地開發的配置呢?其實很簡單,我來定義配置檔案,比如utils/config.dart
enum Env { PROD, DEV, LOCAL, } class Config { static Env env; static String get apiHost { switch (env) { case Env.PROD: return "http://yuanxuxu.com"; case Env.DEV: return "http://develop.yuanxuxu.com"; case Env.LOCAL: default: return "http://local.yuanxuxu.com"; } } }
其中Env
就是一個環境變數,比如我們要獲取api請求的地址,那麼根據環境變數來獲取不同的請求地址,接下來我們只要在執行的入口函式main中定義我們當前執行的環境變數,在main_local.dart
中定義:
import 'package:xxx/utils/config.dart';
void main() {
Config.env = Env.LOCAL; //設定執行環境的環境變數
runApp(new MaterialApp(
...
));
本地開發環境的話我們就獲取到http://local.yuanxuxu.com
:
import 'package:xxx/utils/config.dart'; ... static request(String method, path, {Map<String, dynamic> data, header}) async { options.baseUrl = Config.apiHost; //這裡獲取到http://local.yuanxuxu.com ... return response; }
這樣就是實現了不同環境對於獲取不同的配置了,如果我們現在要編譯打包一個apk檔案用於分發到手機上用於測試預覽使用,那麼可以打包一個呼叫develop環境配置的apk檔案:
flutter build apk -t lib/main_develop.dart
打包生產配置的安裝包也是一樣的,直接build main.dart 檔案。
如果覺得本篇文章對您十分有益,何不 打賞一下