Flutter - итерация по ключам и значениям объекта

У меня есть объект и, и мне интересно, есть ли простой способ перебирать его ключи и значения?

class Post {
  String id;
  String title;
  String article;

  Post(
      {
        this.id,
        this.title,
        this.article
      }
      );
}
14
0
20 363
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Все, что вам нужно сделать, это назвать объект, в котором у вас есть все свойства, например

var object = { this.id,
        this.title,
        this.article   }
for (var property in object) {
    if (object.hasOwnProperty(property)) {
        // do stuff
    }
}

Здесь вы написали Set literal, а не object в Dart.

kashlo 24.03.2020 19:52
Ответ принят как подходящий

Нет.

Вы просите об отражении. Вы можете использовать для этого 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);
  }
}

Другие вопросы по теме