如何在飞镖中创建动态变量

How to create a dynamic variable in dart

我正在将 java 脚本移动到 dart,在 java 脚本中我创建了动态变量,如

window["text" + pageNumber] = 123;
alert(window["text" + pageNumber]);

我如何用飞镖做到这一点?

在 Dart Window 中(window 的类型)是一个 class。您不能向 Dart class 动态添加属性。 window["text" + pageNumber] = 123; 可以与 Map 一起使用。 JS 中的对象表示与地图非常相似,因此可以在那里使用。 如果另一个 class 实现了 [] 运算符,您也可以在那个 class 的实例上调用它,但它仍然不会添加属性。它的实际作用仅取决于 [] 运算符的实现。

Dart 中可能有不同的方法来实现您想要的,但您没有添加有关您尝试解决的实际问题的详细信息。

你可以在 Dart 中使用普通的全局变量,就像在 .

对于您的用例,您可以通过这种方式创建全局 Map 变量

final Map<String,int> myGlobals = <String,int>{};

创建一个存储整数值和字符串名称的映射。

使用 myGlobals['someName'] = 123; 设置值并使用 print(myGlobals['someName']); 读取它们。

如果您需要设置一个也可用于您可能使用的 JS 库的全局值,您可以使用

import 'dart:js';
import 'dart:html';

main() {
    int pagenumber = 5;
    context['Window']['text$pagenumber'] = 123;
    window.alert('${context['Window']['text$pagenumber']}');
}

DartPad 上试用。

提示:

pageNumber 不是字符串时,

"text" + pageNumber 不起作用。 在 Dart 中你不能添加字符串和数字。
"text" + pageNumber.toString() 会起作用,但 'text$pagenumber' 是一种更大胆的方法。在字符串插值中 toString() 会自动为您调用。

另见 Dart js-interop not working if .dart file isn't included