Flutter 實現根據環境加載不一樣配置

以前作後端開發的時候,無論是什麼語言或者框架,都習慣根據不一樣環境加載不一樣的開發配置,好比本地開發的時候,加載local.env配置,部署開發環境的時候加載develop.env配置,一般經過一個環境變量來決定加載相應的配置。最近在開發一款Flutter App,我也但願App在不一樣的環境中加載不一樣的配置文件,實現的方式以下,若有不妥還請指出。javascript

首先在lib創建多個main.dart,好比main_local.dart表示本地開發運行時執行的入口文件,main_develop.dartmain.dart分別表示開發環境和生產環境:java

lib/
├── api/
├── main.dart
├── main_develop.dart
├── main_local.dart
├── models/
├── pages/
├── utils/
└── widgets/

這樣若是咱們運行在本地開發,那麼執行後端

flutter run -t lib/main_local.dart

那麼如何在執行本地開發環境的時候來調用本地開發的配置呢?其實很簡單,我來定義配置文件,好比utils/config.dartapi

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:async

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 文件。測試

轉載請註明: 轉載自Ryan是菜鳥 | LNMP技術棧筆記ui

若是以爲本篇文章對您十分有益,何不 打賞一下spa

謝謝打賞

本文連接地址: Flutter 實現根據環境加載不一樣配置

相關文章
相關標籤/搜索