【问题标题】:Use same method to get env vironment in flutter from build command than from .env file使用相同的方法从构建命令而不是从 .env 文件中获取 env vironment
【发布时间】:2020-10-07 18:11:45
【问题描述】:

我正在使用this 包在 .env 中设置 Flutter 中的环境变量。

要读取我必须拥有的变量,这是我的 main.dart

Future main() async {
  await DotEnv().load('.env');
  runApp(MyApp());
} 

然后这样读

print(DotEnv().env['VAR_NAME']);

来自this的问题,我也可以像这样在构建命令中添加变量

flutter run --dart-define=APP_VERSION=0.1.2

然后要读取构建命令中设置的那些,我必须这样做

const appVersion = String.fromEnvironment('APP_VERSION', defaultValue: 'development');

请问有什么方法可以读取 .env 文件或构建命令中设置的变量吗?

我将在我的 .env 文件中包含用于本地开发的变量,在 dev 和 prod 环境中它们将通过命令进行设置。那么如何才能找到适用于这两种情况的方法呢?

谢谢

【问题讨论】:

    标签: flutter dart environment-variables


    【解决方案1】:

    我不熟悉你提到的包,但一个相当安全的赌注如下:

    创建一个负责处理环境变量的单例类:

    final env = Env._();
    
    class Env {
        Env._();  // private constructor to prevent accidental initialization
    }
    

    创建一个从其字符串中获取环境变量的方法,并选择默认值。 IMO 我会优先考虑命令行参数,但这是一个品味问题:

    String get(String key, {String defaultValue}) {
       final fromFile = DotEnv().env[key];
       final fromArgs = String.fromEnvironment(key);
    
    //    return the value from command line if it exists
    //    if not, return the value from .env file
    //    if still null, return a default
       return fromArgs ?? fromFile ?? defaultValue;
    }
    

    然后您可以使用以下方式全局访问数据:

    env.get('MY_VARIABLE_NAME', defaultValue: 'hello');
    

    为了更简洁,您可以使用 Dart 的可调用类,将 get() 重命名为 call(),然后使用以下方式使用它:

    env('MY_VARIABLE_NAME', defaultValue: 'hello');
    

    【讨论】:

      猜你喜欢
      • 2020-10-09
      • 2021-02-11
      • 2021-10-17
      • 2022-01-07
      • 2021-02-28
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多