如何在Dart中创建动态变量

5

我正在将JavaScript转换为Dart,JavaScript中我创建动态变量的方式如下:

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

我该如何使用Dart实现这个功能?
1个回答

8
在Dart中,Windowwindow的类型)是一个类。您无法动态添加属性到Dart类中。使用Map可以实现window["text" + pageNumber] = 123;。JS中的对象表示与映射非常相似,因此它可以正常工作。
如果另一个类实现了[]运算符,您也可以在该类的实例上调用它,但它仍然不会添加属性。它实际上做什么取决于[]运算符的实现方式。
在Dart中,可能有不同的方法来实现您想要的内容,但您没有添加关于您要解决的实际问题的详细信息。
您可以像在 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 上试一试。

提示:

"text" + pageNumberpageNumber 不是字符串时无法工作。 在 Dart 中,您不能将字符串和数字相加。
"text" + pageNumber.toString() 可以工作,但 'text$pagenumber' 是更具 Dart 风格的方式。在字符串插值中,toString() 会自动调用。

另请参见 如果未包含 .dart 文件,则 Dart js-interop 不起作用


谢谢。我该如何使用变量text5以供进一步使用?因为我将生成动态元素,需要创建动态变量以便进一步引用这些元素。所以我必须使用context['Window']['text$pagenumber'] = 一些输入值...这真的很难使用!!! - nisar
样例链接可以动态创建表格,我需要保存每个元素的变量名以备后用。在这个链接中,我该如何为table_row_ele变量创建动态值? - nisar
2
在Dart中,使用window是一种严重的误用。这正是使用Dart的一个免费技巧之一。只需创建一个全局的Map变量,并给它一个反映其目的的名称,然后将您的值存储在其中。我已经更新了我的答案。我不知道你所说的table_row_ele变量是什么意思。 - Günter Zöchbauer
2
我将使用map。 - nisar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接