Dart:如何将对象数组转换为哈希图数组?

时间:2018-11-30 00:46:10

标签: object dart hashmap flutter

我想将对象转换为哈希图,以便可以使用Flutter方法通道将数据发送到Android。

我已经考虑过逐个迭代并映射它们,但是必须有一种更优雅的方式来实现此目的...

示例:

对象

class Something {
  Something(this.what, this.the, this.fiddle);
  final String what;
  final int the;
  final bool fiddle;
}

其他地方

List<Something> listOStuff = List<Something>.generate(10, (int index){
  return Something(index.toString(), index, false,);
});

List<Map<String, dynamic>> parseToMaps(List<Something> listOStuff){
  List<Map<String, dynamic>> results;
  // do something crazy to get listOStuff into Map of primitive values for each object
  // preferably a built in method of some sort... otherwise, i guess i'll just iterate...
  // maybe even an imported package if such thing exists
  return results;
}

List<Map<String, dynamic>> listOMaps = parseToMaps(listOStuff);

Something like this in Java

2 个答案:

答案 0 :(得分:4)

您可以使用map并返回所需的对象:

    List<Map<String, dynamic>> listOMaps = listOStuff
            .map((something) => {
                  "what": something.what,
                  "the": something.the,
                  "fiddle": something.fiddle,
                })
            .toList(); 

答案 1 :(得分:1)

我不确定您到底在寻找什么,但是有一种方法可以对自定义对象进行编码,而无需在调用该方法时直接指定它。

您要做的是实现MethodCodec和/或MessageCodec,它们定义了对象的编码和解码方式。最简单的方法可能是子类StandardMethodCodec和/或StandardMessageCodec(重写StandardMessageCodec并将其传递给StandardMessageCodec可能就足够了)。

如果正确实现对象的读写,那么您要做的就是将对象列表直接传递给方法调用,然后flutter将处理编码。

请注意,事物的Android和iOS上都有相应的类,您可以使用这些类将数据直接解码为对象,实际上,您可能必须实现它们才能使事物起作用,具体取决于您的操作方式