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);