dart Flutter -遍历对象键和值

htzpubme  于 11个月前  发布在  Flutter
关注(0)|答案(5)|浏览(179)

我有一个对象,我想知道是否有一个简单的方法来遍历它的键和值?

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

  Post(
      {
        this.id,
        this.title,
        this.article
      }
      );
}

字符串

s6fujrry

s6fujrry1#

没有。
你需要的是反射。如果你的平台上有dart:mirrors API(不在Flutter中),你可以使用dart:mirrors来实现。你可以使用package:reflectable来生成代码。或者你可以使用package:json_serializable从一个对象生成Map
如果你只是想为一个特定的类做些什么,我只需要手动写:dart Map<String, dynamic> toJson() => {"id": id, "title": title, "article": article};,然后在你想编译的时候使用它。

tpgth1q7

tpgth1q72#

这几乎每天都困扰着我。这也是Dart的Web端的问题。在我看来,这是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
    }); 
}

字符串

3zwtqj6y

3zwtqj6y3#

你也可以使用一个getter?它会要求你一次性设置所有的字段,但是在那之后,你可以调用完整的字段列表,并通过它进行查询。

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);
  }
}

字符串

bxjv4tth

bxjv4tth4#

令人难以置信的是,这个简单的问题没有简单的答案。

for (var key in yourObject.keys)
  Text("${key}: ${yourObject[key]}"),

字符串

cgyqldqp

cgyqldqp5#

你所要做的就是给你拥有所有属性的对象命名,例如

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

字符串

相关问题