Flutter Dart - динамически получить свойство класса - PullRequest
0 голосов
/ 25 марта 2020

Я хотел бы получить свойство класса, передав ему строковое имя. Как я могу это сделать?

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

}

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

В дополнение к ответу Суман я рекомендую предоставить метод, который преобразует объект в карту и извлекает свойство, если оно там есть.

Например:


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
}


0 голосов
/ 26 марта 2020

Быстрый обходной путь:

  1. Преобразование вашего класса в JSON.
  2. Доступ к свойству через json [ключ].
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;
  }
}

Надеюсь, это поможет. Приветствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...