例如,为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是否有办法设置其中一个/两个,特别是......
在我弄清楚如何:)
之后,很高兴为某些文档提供帮助答案 0 :(得分:24)
从Flutter 1.17开始,您可以根据需要定义编译时变量。
要这样做,只需在--dart-define
或flutter 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');
此外,它们也可以在本机层中使用。
答案 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');
建议:
答案 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;