bool.fromEnvironment 总是返回 false

问题描述 投票:0回答:2

这是一个代码:

const bool a = const bool.fromEnvironment("true");
print(a); // false

是的,默认值为 false。我应该怎么做才能使

a
为 true,而不使用默认值?那么字符串参数是什么?也许是一把钥匙?

flutter dart
2个回答
6
投票

你想实现什么目标? 将

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


0
投票

是的,这是正确的行为

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);
© www.soinside.com 2019 - 2024. All rights reserved.