【问题标题】:Dart: How do I convert an array of objects to an array of hashmaps?Dart:如何将对象数组转换为哈希图数组?
【发布时间】:2018-11-30 00:46:09
【问题描述】:

我想将我的对象转换为哈希图,以便我可以使用 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

【问题讨论】:

  • 你能举一个你试图转换的对象的例子吗?
  • 更新了一个简单的例子

标签: object dart hashmap flutter


【解决方案1】:

您可以使用map 并返回您想要的对象:

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

【讨论】:

  • 是的,这就是我所说的迭代/映射方法......但我猜真的没有太多其他东西......
  • 老实说,我一直在寻找下面的答案,但我写的问题非常适合这个答案,所以这是我接受你的好先生
【解决方案2】:

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

您需要做的是实现一个MethodCodec 和/或MessageCodec,它定义了您的对象是如何编码和解码的。最简单的方法可能是继承StandardMethodCodec 和/或StandardMessageCodec(覆盖StandardMessageCodec 并将其传递给StandardMessageCodec 可能就足够了)。

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

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

【讨论】:

  • 这将是完美的!你有我如何做到这一点的例子吗?可能是我上面给出的简单示例?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
  • 2017-06-20
  • 2019-10-27
  • 2019-05-23
  • 2015-11-26
  • 2021-12-03
  • 1970-01-01
相关资源
最近更新 更多