Все, что вам нужно сделать, это назвать объект, в котором у вас есть все свойства, например
var object = { this.id,
this.title,
this.article }
for (var property in object) {
if (object.hasOwnProperty(property)) {
// do stuff
}
}
Нет.
Вы просите об отражении. Вы можете использовать для этого dart:mirrors
API, если библиотека доступна на вашей платформе (ее нет во Flutter).
Вы могли бы сгенерировать для него код, используя package:reflectable
.
Или вы можете использовать package:json_serializable
для генерации Map
из объекта.
Если вы просто пытаетесь сделать что-то для одного конкретного класса, я бы просто вручную
написать:
dart
Map<String, dynamic> toJson() => {"id": id, "title": title, "article": article};
а затем используйте это, когда хотите повторить.
Меня это беспокоит почти каждый день. Это также проблема на веб-стороне Dart. На мой взгляд, это один из главных недостатков Dart ...
Однако - вот мое решение. Я использую интерфейсный класс для этих «сериализуемых» классов.
abstract class JsonTO {
Map<String, dynamic> toJson();
}
class Device implements JsonTO {
Map<String, dynamic> toJson() {
return ... Your serialization thing
}
}
main() {
final device = Device();
final json = device.toJson();
json.forEach((final String key, final value) {
_logger.info("Key: {{$key}} -> value: ${value}");
// do with this info whatever you want
});
}
Вы также можете использовать геттер? Вам потребуется настроить все поля один раз, но после этого вы можете вызвать полный список полей и выполнить итерацию по нему.
class Person{
final String _firstName;
final String _secondName;
Person(this._firstName,this._secondName);
String get hisName{
return _firstName;
}
}
class Player extends Person{
final int _shirtNumber;
Player(String _firstName,String _secondName,this._shirtNumber) : super(_firstName, _secondName);
List get everything{
final stuff=[_firstName,_secondName,_shirtNumber];
return stuff;
}
}
void main(List<String> arguments) {
final foo = Player('David','Beckham',7);
print(foo.everything);
for (final blah in foo.everything){
print(blah);
}
}
Здесь вы написали Set literal, а не object в Dart.