Flatter firebase database.set (объект) проблема - PullRequest
0 голосов
/ 09 января 2019

У меня есть класс Product и он находится в списке plist Теперь мне нужно вызвать firebase database.set (plist), это работает с Java, но когда я попытался сделать это с помощью flutter dart, это показывает ошибку, у кого-нибудь есть решение этой проблемы Из StackOverflow я понимаю, что использую database.set ('{"a": "apple"}), но когда я имею дело со List, я не могу использовать это решение

сообщение об ошибке обновления

ошибка, вызванная неверным аргументом: экземпляр 'Product'

Мой код

  String table_name="order";
  FirebaseAuth.instance.currentUser().then((u){
    if(u!=null){
      FirebaseDatabase database = FirebaseDatabase(app: app);
      String push=database.reference().child(table_name).child(u.uid).push().key;

      database.reference().child(table_name).child(u.uid).child(push).set( (productList)).then((r){
        print("order set called");

      }).catchError((onError){
         print("order error called "+onError.toString());
      });
    }
  });
}

1 Ответ

0 голосов
/ 05 мая 2019

Расширяя немного ответ, данный как комментарий выше

Вы должны заранее создать вспомогательную карту:

Map aux = new Map<String,dynamic>();

А затем выполните итерацию по массиву, в котором вы добавляете соответствующую карту для каждого дочернего элемента, который вы хотите добавить:

 productList.forEach((product){
    //Here you can set the key of the map to whatever you like
    aux[product.id] = product.toMap();
 });

На всякий случай функция toMap внутри класса Product должна выглядеть примерно так:

Map toMap() {
  Map toReturn = new Map();
  toReturn['id'] = id;
  toReturn['name'] = name;
  toReturn['description'] = description;
  return toReturn;
}

И затем, когда вы вызываете функцию set для сохранения в firebase, вы можете сделать что-то вроде:

.set({'productList':aux,})

Надеюсь, это кому-то помогло.

...