这是一个代码:
const bool a = const bool.fromEnvironment("true");
print(a); // false
是的,默认值为 false。我应该怎么做才能使
a
为 true,而不使用默认值?那么字符串参数是什么?也许是一把钥匙?
你想实现什么目标? 将
a
设置为 true 可以通过 const a = true;
. 来完成
bool.fromEnvironment
函数允许您查找定义的命名字符串属性,这些属性可以在编译时在命令行添加,或者可以由您正在编译/运行的平台定义。 String.fromEnvironment
和 int.fromEnvironment
也是如此。
一组此类平台属性是
dart.library.*
,对于平台支持的每个 true
库,这些属性设置为 dart:*
。
因此,要打印
false
以外的内容,您可以这样做:
print(const bool.fromEnvironment("dart.library.core"));
这个非常无聊,因为所有平台都支持
dart:core
。
您可以检查其他库的可用性:
const bool supportsMirrors = bool.fromEnvironment("dart.library.mirrors");
const bool isJavaScript = bool.fromEnvironment("dart.library.js");
或者,您可以在编译时在命令行上提供一个值。我们以
dart
独立虚拟机为例。编写以下脚本script.dart
:
void main() {
print(const bool.fromEnvironment("my-fancy-thing"));
}
如果您以
dart script.dart
方式运行它,它将打印 false
。
如果您将其运行为 dart -Dmy-fancy-thing=true script.dart
,它将打印 true
。
是的,这是正确的行为
const bool a = const bool.fromEnvironment("true");
代码将在编译时查看是否将任何名为“true”的参数传递给程序(这可以通过传递 dart Define 参数来完成),如果没有,则默认为 false。请参阅方法,其中
defaultValue = false
external const factory bool.fromEnvironment(String name,
{bool defaultValue = false});
现在如果你想让它返回 true,你必须提供名为 true 的参数(这没有多大意义),可以这样完成
--dart-define true=true
下面是我使用 dart 定义并将 env 值读取为 bool 的示例
patrol build android --dart-define PATROL_NATIVE_BACK_OPERATION_ENABLED=false
并像下面一样阅读它
return const bool.fromEnvironment('PATROL_NATIVE_BACK_OPERATION_ENABLED', defaultValue: true);