在Flutter中设置环境变量

时间:2017-05-29 20:55:53

标签: dart flutter

例如,为API构建客户端,例如Twitch。

在Dart CLI二进制文件中,我可以使用通用环境变量或Dart定义变量。例如,将两者用作后备:

main() {
  String clientId = 
      // dart -dCLIENT_ID='abc bin/example.dart
      // This is considered "compiled-into" the application.
      const String.fromEnvironment('CLIENT_ID') ??

      // CLIENT_ID='abc' dart bin/example.dart
      // This is considered a runtime flag.
      Platform.environment['CLIENT_ID'];

  // Use clientId.
}

Flutter是否有办法设置其中一个/两个,特别是......

  • 在开发时间
  • 发货至prod

在我弄清楚如何:)

之后,很高兴为某些文档提供帮助

4 个答案:

答案 0 :(得分:24)

从Flutter 1.17开始,您可以根据需要定义编译时变量。

要这样做,只需在--dart-defineflutter run期间使用flutter build参数

如果您需要传递多个键值对,只需多次定义--dart-define

flutter run --dart-define=SOME_VAR=SOME_VALUE --dart-define=OTHER_VAR=OTHER_VALUE

然后在代码中的任何地方都可以使用它们,如:

const SOME_VAR = String.fromEnvironment('SOME_VAR', defaultValue: 'SOME_DEFAULT_VALUE');
const OTHER_VAR = String.fromEnvironment('OTHER_VAR' defaultValue: 'OTHER_DEFAULT_VALUE');

此外,它们也可以在本机层中使用。

如果有的话-here is an article that explains more

答案 1 :(得分:6)

对于配置,我见过的常见模式是使用单独的主文件。即。

flutter run -t lib/production_main.dart

flutter build apk -t lib/debug_main.dart

然后在那些不同的主文件中设置所需的配置。

在阅读ID方面,您可以从任意资产https://flutter.io/assets-and-images/执行此操作。

我相信Flutter可以按照您的建议读取环境,但我不知道如何在iOS或Android上设置这些环境变量。

答案 2 :(得分:1)

由于我也尝试解决此问题,并且遇到了该线程,所以我只想为将来寻求解决方案的人们添加此...如果您要寻找的只是PROD / DEV环境,现在有一个支持的获取应用是否在生产中的方式:

const bool isProduction = bool.fromEnvironment('dart.vm.product');

建议:

https://twitter.com/FlutterDev/status/1048278525432791041

https://github.com/flutter/flutter/issues/4014

答案 3 :(得分:-2)

创建一个类:

import 'package:flutter/foundation.dart';

class AppUtils {
  static String get clientId {
    if (kDebugMode) return 'debug_id';
    else if (kProfileMode) return 'profile_id';
    else if (kReleaseMode) return 'production_id';
    else if (kIsWeb) return 'web_mode_id';
    
    throw ArgumentError('No mode detected');
  }
}

用法:

var id = AppUtils.clientId;