我想将对象转换为哈希图,以便可以使用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);
答案 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上都有相应的类,您可以使用这些类将数据直接解码为对象,实际上,您可能必须实现它们才能使事物起作用,具体取决于您的操作方式