Flutter 如何快速切换生产和测试环境

885 阅读2分钟

方式一:判断是否是生产环境

****\

在实际我们需要根据本地、测试或生产环境配置不同的运行参数,通常是配置接口地址。一种做法是通过判断环境是不是生产环境来配置。

`if(bool.fromEnvironment('dart.vm.product')) {

    //生产环境参数配置

} else {

    //开发环境参数配置

}`

方式二:使用配置文件

****\

上述的方式有个缺陷是如果想要调试时切换到生产环境时需要改代码,而且如果有超过2个环境的时候就不好操作了。嗯,有点 Low!

其实,在 Flutter 调试运行的时候,可以指定入口文件,例如:

\

` flutter run -t lib/main_local.dart

flutter run -t lib/main_dev.dart

flutter run -t lib/main.dart`

\

在打包时也可以指定打包的入口文件,命令如下:

\

`flutter build apk -t lib/main_local.dart

flutter build apk -t lib/main_dev.dart

flutter build apk`

\

针对这个特性我们可以使用不同的 main文件来加载对应环境的参数。首先我们建立一个环境变量配置类,分布对应生产(Product)、测试环境(Development)和本地(Local),根据不同的环境枚举返回不同的接口地址:

\

`enum Env {

  Product,

  Development,

  Local

}`

\

`class EnvConfig {

  static Env env;

\

  static String getBaseUrl(Env env) {

    switch (env) {

      case Env.Product:

        return "product-api.host.com/";

      case Env.Development:

        return "dev-api.host.com/";

      case Env.Local:

       return "http://localhost/api";

      default:

        return "http://localhost/api";

    }

  }

} ` \

然后根据环境不同定义不同的 main 入口文件,在该文件的 main 方法中配置不同的环境参数。

\

// main_dev.dart

`void main() {

  runApp(MyApp());

  CookieManager.instance.initCookie();

  HttpUtil.setBaseUrl(EnvConfig.getBaseUrl(Env.Development));

}

\

// main.dart

void main() {

  runApp(MyApp());

  CookieManager.instance.initCookie();

  HttpUtil.setBaseUrl(EnvConfig.getBaseUrl(Env.Product));

}`

\

之后就可以使用上述的命令运行或者打包对应环境的应用了。

Use IntelliSense to learn about possible attributes..png

\

` "version": "0.2.0",

    "configurations": [

        {

            "name": "XiaoHuiManager",

            "request": "launch",

            "type": "dart",

            "program": "lib/main_dev.dart",

            // "flutterMode": "release",

            // "flutterMode": "profile"

        },

        {

            "name": "XiaoHuiManager",

            "request": "launch",

            "type": "dart",

            "program": "lib/main.dart",

            // "flutterMode": "release",

            // "flutterMode": "profile"

        }

    ] ` \

在调试的时候,选择不同的配置名称就可以指定调试时的入口文件,例如选择 Dev 开启调试后,会在控制台打印出:

\

Launching lib/main_dev.dart on iPhone 11 Pro in debug mode...

\

从而实现我们调试不同环境的目的。