bool.hasEnvironment 构造函数
- String name
是否在编译配置环境声明了 name
。
编译配置环境由编译或运行 Dart 程序的环境工具提供。环境是一组字符串键与其关联的字符串值的映射。与 name
关联的字符串值或不存在的值必须在单个程序的所有 String.fromEnvironment、int.fromEnvironment、bool.fromEnvironment
和 bool.hasEnvironment 调用中保持一致。
如果 name
在编译配置环境中有一个关联的值,则该构造函数的值为 true
,如果没有则值为 false
。如果存在关联值,则可以使用 const String.fromEnvironment(name)
访问该值。否则,String.fromEnvironment(name, defaultValue: someString)
会评估为提供的 defaultValue
。
String.fromEnvironment、int.fromEnvironment 和 bool.fromEnvironment 构造函数总是产生一个 String、int 或 bool 类型的值,这是构造函数所需的。在大多数情况下,对于某个 name
缺少配置环境关联通常意味着代码应回退到默认行为,并且该类型的默认值通常完美地代表着这一点。
在某些情况下,不同类型的值,大多是 null
,可能更好地表示选择的不存在。在这种情况下,可以使用此构造函数首先检查是否存在值,然后再使用其他 fromEnvironment
构造函数。示例
const int? indentOverride = bool.hasEnvironment("indent-override")
? int.fromEnvironment("indent-override")
: null;
void indentLines(List<String> lines, int indentation) {
int actualIndentation = indentOverride ?? indentation;
// ... Do something to lines.
}
这种模式允许编译配置向程序提供覆盖值,但不提供此值,程序可以区分显式提供的值和不存在的情况。
另一个用例是仅在所需值可用时执行额外的操作。示例
const Logger? logger = bool.hasEnvironment("logging-id")
? Logger(id: String.fromEnvironment("logging-id"))
: null;
仅保证在作为 const
调用时此构造函数才能正常工作。在某些平台(这些平台可以在运行时访问编译器选项)上,它可能作为非常量的调用正常工作,但大多数编译时平台将没有这些信息。
实现
external const factory bool.hasEnvironment(String name);