flutter多渠道打包运行

使用--dart-define的方式打包

config.dart如下:

// 环境配置
class EnvConfig {
  final String appTitle;
  final String appDomain;
  EnvConfig({
    required this.appTitle,
    required this.appDomain,
  });
}

// 获取的配置信息
class Env {
  // 获取到当前环境
  static const appEnv = String.fromEnvironment(EnvName.envKey);

  // 开发环境
  static final EnvConfig _debugConfig = EnvConfig(
    appTitle: "debugTitle",
    appDomain: "http://www.debugxxx.com",
  );
  // 发布环境
  static final EnvConfig _releaseConfig = EnvConfig(
    appTitle: "releaseTitle",
    appDomain: "http://www.releasexxx.com",
  );
  // 测试环境
  static final EnvConfig _testConfig = EnvConfig(
    appTitle: "testTitle",
    appDomain: "http://www.testxxx.com",
  );

  static EnvConfig get envConfig => _getEnvConfig();

// 根据不同环境返回对应的环境配置
  static EnvConfig _getEnvConfig() {
    print("========appEnv:::$appEnv=============");
    switch (appEnv) {
      case EnvName.debug:
        return _debugConfig;
      case EnvName.release:
        return _releaseConfig;
      case EnvName.test:
        return _testConfig;
      default:
        return _debugConfig;
    }
  }
}

// 声明的环境
abstract class EnvName {
  // 环境key
  static const String envKey = "MODE";
  // 环境value
  static const String debug = "debug";
  static const String release = "release";
  static const String test = "test";
}

代码中使用如下:

@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(Env.envConfig.appTitle),//显示envConfig.appTitle
      ),
      body: SingleChildScrollView(
        child: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              //显示envConfig.appDomain
              Text(
                Env.envConfig.appDomain,
                style: const TextStyle(fontSize: 18, fontWeight: FontWeight.w700),
              ),
              Text(
                '$_counter',
                style: Theme.of(context).textTheme.headline4,
              ),
            ],
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

默认运行后如下:

flutter多渠道打包运行_第1张图片

方法1、通过Terminal命令来执行--dart-define

输入flutter run --dart-define=MODE=test,回车(其中flutter run表示运行flutter程序,--dart-define=是固定写法,NODE=test对应于config.dart下的EnvName类中的envKey = "MODE"和test = "test")

运行如下:Cannot run with sound null safety, because the following dependencies don't support null safety

flutter多渠道打包运行_第2张图片

 不支持空安全,添加输入代码如下:

flutter run --dart-define=MODE=test --no-sound-null-safety

运行成功如下:

flutter多渠道打包运行_第3张图片

 flutter多渠道打包运行_第4张图片

同理运行处release环境下如下:

输入flutter run --dart-define=MODE=release --no-sound-null-safety 回车

flutter多渠道打包运行_第5张图片

到此方法1结束。

方法2、通过Edit Configurations

1、点击这里选择Edit Configurations,点击进入

flutter多渠道打包运行_第6张图片

 2、点击+号

flutter多渠道打包运行_第7张图片

3、选择flutter

flutter多渠道打包运行_第8张图片 

4、填写如下:

flutter多渠道打包运行_第9张图片 依次为名字,启动路径,运行的args,最后点击Apply。 

5、这里就会多一个test,如下选择test运行

flutter多渠道打包运行_第10张图片

 结果如下:

flutter多渠道打包运行_第11张图片

到此结束。

 

 

你可能感兴趣的:(flutter,flutter)