FLUTTER如何根据传递的字符串名称获取变量?

时间:2018-04-17 06:21:02

标签: dart flutter

我已将变量存储在具有代码名称的类中。

假设我想从该课程中获取XVG,我想做

String getIconsURL(String symbol) {

  var list = new URLsList();

  //symbol = 'XVG'

  return list.(symbol);
}

class URLsList{

var XVG = 'some url';
var BTC = 'some url';

}

有人可以帮我实现这个目标还是为我提供更好的解决方案?

3 个答案:

答案 0 :(得分:3)

在颤动时使用飞镖doesn't support reflection

如果您想要出于某种原因直接在代码中使用该文字,我建议您使用文字替换(使用自己喜欢的工具或使用intellij&find;替换为正则表达式)将其改为地图,即

final Map<String, String> whee = {
  'XVG': 'url 1',
  'BTC': 'url 2',
};

另一种方法是将其保存为JSON中的assets文件,然后在应用程序打开时加载并读取它,或者甚至在首次运行/需要时从服务器下载它(如果URL需要更新的频率高于您计划更新应用程序的时间。硬编码这样的数据并不一定总是好主意。

编辑:如何使用。

final Map<String, String> whee = .....

String getIconsURL(String symbol) {
  //symbol = 'XVG'

  return whee[symbol];
}

如果你在一个类中定义它,请确保你将它设置为静态,这样每次实例化它时它都不会生成另一个。

此外,如果您想要遍历它们,您可以选择使用entrieskeysvalues - 请参阅Map Class documentation

答案 1 :(得分:1)

我只是实施getProperty(String name)方法或[]运算符,如:

class URLsList{
  var XVG = 'some url';
  var BTC = 'some url';

  String get operator [](String key) {
    switch(key) {
      case 'XVG': return XVG;
      case 'BTC': return BTC;
    }
  }
}

String getIconsURL(String symbol) {
  var list = new URLsList();
  return list[symbol];
}

您还可以使用reflectable包,通过代码生成,您可以使用类似反射的代码。

答案 2 :(得分:0)

假设该类是通过JSON对象创建的,则始终可以使用objectName.toJSON(),然后使用变量名作为数组索引来进行计算。