Flutter Dart - dynamically get a property of a class
Further to Suman's answer I recommend exposing a method that converts the object to a map and retrieves the property if it's there.
For example:
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}
A quick workaround would be,
- Convert your class into JSON.
- Access the property via 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; }}
Hope this helps. Cheers.