bool.hasEnvironment 构造函数

const bool.hasEnvironment(
  1. String name
)

是否在编译配置环境声明了 name

编译配置环境由编译或运行 Dart 程序的环境工具提供。环境是一组字符串键与其关联的字符串值的映射。与 name 关联的字符串值或不存在的值必须在单个程序的所有 String.fromEnvironmentint.fromEnvironmentbool.fromEnvironmentbool.hasEnvironment 调用中保持一致。

如果 name 在编译配置环境中有一个关联的值,则该构造函数的值为 true,如果没有则值为 false。如果存在关联值,则可以使用 const String.fromEnvironment(name) 访问该值。否则,String.fromEnvironment(name, defaultValue: someString) 会评估为提供的 defaultValue

String.fromEnvironmentint.fromEnvironmentbool.fromEnvironment 构造函数总是产生一个 Stringintbool 类型的值,这是构造函数所需的。在大多数情况下,对于某个 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);