• 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),
          ),
        );
      }
    }

    默认运行后如下:

    方法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 run --dart-define=MODE=test --no-sound-null-safety

    运行成功如下:

     

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

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

    到此方法1结束。

    方法2、通过Edit Configurations

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

     2、点击+号

    3、选择flutter

     

    4、填写如下:

     依次为名字,启动路径,运行的args,最后点击Apply。 

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

     结果如下:

    到此结束。

     

     

  • 相关阅读:
    集约管控、按需分配:和鲸聚焦 AI for Science 科研算力高校调配
    Java版ORM最初雏形
    MySQL索引与表结构
    面对多种信号干扰,如何实现高效干扰测试?
    【MySQL基础】-【数据处理之增删改】
    百度收录提交工具-免费主动提交百度快速收录软件
    二维纳米材料
    中科数安|公司办公终端、电脑文件数据 \ 资料防泄密系统
    Vue的路由守卫
    免费开源漏扫软件 Nessus
  • 原文地址:https://blog.csdn.net/qq_34707150/article/details/125910476