Дарт: Как мне преобразовать массив объектов в массив хэш-карт? - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу преобразовать свои объекты в хеш-карты, чтобы я мог использовать каналы метода 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);

Что-то вродеэто в Java

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Я не уверен, что именно вы ищете, но есть способ кодировать пользовательские объекты без необходимости указывать его непосредственно при вызове метода.

Что вам нужно сделать, так этореализовать MethodCodec и / или MessageCodec , который определяет, как ваш объект кодируется и декодируется.Возможно, самый простой способ - создать подкласс StandardMethodCodec и / или StandardMessageCodec (этого может быть достаточно для переопределения StandardMessageCodec и передачи его в StandardMessageCodec).

Если вы правильно реализовали чтение и запись для своего объекта, то все, что вам нужно сделать, это передать список объектов непосредственно в вызов вашего метода, и flutter обработает кодировку.

Обратите внимание, чтоявляются соответствующими классами на стороне Android и iOS вещей, которые вы могли бы использовать для декодирования данных непосредственно в объекты, и на самом деле вам, возможно, придется реализовать их, чтобы заставить вещи работать в зависимости от того, как вы это делаете.

0 голосов
/ 30 ноября 2018

Вы можете использовать map и вернуть нужный объект:

    List<Map<String, dynamic>> listOMaps = listOStuff
            .map((something) => {
                  "what": something.what,
                  "the": something.the,
                  "fiddle": something.fiddle,
                })
            .toList(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...