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