Flutter Dart - 动态获取类的属性
Posted
技术标签:
【中文标题】Flutter Dart - 动态获取类的属性【英文标题】:Flutter Dart - dynamically get a property of a class 【发布时间】:2020-07-06 07:11:01 【问题描述】:我想通过传递一个字符串名称来获取一个类的属性。我该怎么做?
class A
String fName ='Hello';
main()
A a = A();
String var1='fName'; // name of property of A class
print (a.fName); // it is working fine
print (a.$var1); // it is giving error that no getter in A class. but I want to pass var1 and automatically get the associate property
【问题讨论】:
【参考方案1】:在 Suman 的回答中,我建议公开一种方法,将对象转换为地图并检索属性(如果存在)。
例如:
class Person
String name;
int age;
Person(this.age, this.name);
Map<String, dynamic> _toMap()
return
'name': name,
'age': age,
;
dynamic get(String propertyName)
var _mapRep = _toMap();
if (_mapRep.containsKey(propertyName))
return _mapRep[propertyName];
throw ArgumentError('propery not found');
main()
Person person = Person(age: 10, name: 'Bob');
print(person.name); // 'Bob'
print(person.get('name')); // 'Bob'
print(person.get('age')); // 10
// wrong property name
print(person.get('wrong')); // throws error
【讨论】:
【参考方案2】:一个快速的解决方法是,
-
将您的类转换为 JSON。
通过 json[key] 访问属性。
void main()
String var1='name';
String var2='age';
Info info= Info(name:"Suman", age:4);
final json=info.toJson();
print("NAME = $json[var1]");
print("AGE = $json[var2]");
class Info
String name;
int age;
Info(this.name, this.age);
Info.fromJson(Map<String, dynamic> json)
name = json['name'];
age = json['age'];
Map<String, dynamic> toJson()
final Map<String, dynamic> data = new Map<String, dynamic>();
data['name'] = this.name;
data['age'] = this.age;
return data;
希望这会有所帮助。干杯。
【讨论】:
以上是关于Flutter Dart - 动态获取类的属性的主要内容,如果未能解决你的问题,请参考以下文章