Как преобразовать массив карты в Firestore в список карт Dart - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь создать приложение с помощью Flutter и Firestore, но меня смущает то, как мне нужно внедрить мои данные из Firestore в язык Dart, поэтому проблема в том, что у меня есть массив карты в моем Firestore, каждый элемент в массиве представляет карту, подобную этой

screenshot

И в моем приложении я хочу представить данные из Firestore во что-то читаемое, я объявляю класс как это:

class rest_model{
String rest_name;
GeoPoint rest_lat_long;
GeoPoint city_lat_long;
var rest_address = new Map();
var rest_food_list = new List<Map>();

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

rest_model.map(dynamic obj){

this.rest_name = obj['rest_name'];
this.rest_lat_long = obj['rest_lat_long'];
this.city_lat_long = obj['city_lat_long'];
this.rest_address['rest_email'] = obj['rest_address']['rest_email'];
this.rest_address['rest_phone']=obj['rest_address']['rest_phone'];
this.rest_address['rest_website'] = obj['rest_address']['rest_website'];
}

rest_model.fromMap(Map<String, dynamic> map){

this.rest_name = map['rest_name'];
this.rest_lat_long = map['rest_lat_long'];
this.city_lat_long = map['city_lat_long'];
this.rest_address['rest_email'] = map['rest_address']['rest_email'];
this.rest_address['rest_phone']=map['rest_address']['rest_phone'];
this.rest_address['rest_website'] = map['rest_address']['rest_website'];
}

Map<String, dynamic> toMap(){
var map = new Map<String, dynamic>();
map['rest_name'] = rest_name ;
map['rest_lat_long'] = rest_lat_long;
map['city_lat_long'] = city_lat_long;
map['rest_address'] = rest_address.values;
}

Но я не знаю, как преобразовать массив карт rest_food_list.

Пожалуйста, кто-нибудь может мне помочь?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2020
  1. Создать класс в дротике, подобный классу в firestore1. Создайте класс в дартс, похожий на класс в Firestore. У меня есть класс Post в Dart и массив записей в FireStore. Массив Firestore Map

  2. Мой класс в Dart похож на ниже

class Main{
  final String userName;
  final List<Post> post;

  Main({this.userName, this.post});
}

class Post {
  final String postImg;
  final int likes;
  final String description;

  Post({this.postImg, this.description, this.likes});
}

Когда я выбираю данные из firestore, поскольку в firestore есть массив, так что вы можете конвертировать этот массив Map в дартс.

//fetch firestore documents by getDocuments()
data.documents.forEach((doc) {
      Main main = new Main(
          userImg: doc.data["user_image"],
          post: List<Post>.from(doc.data["posts"].map((item) {
            return new Post(
                likes: item["likes"],
                postImg: item["image"],
                description: item["description"]);
          })));
      //add the main data object to List;
    }

Надеюсь, это поможет !!

0 голосов
/ 12 февраля 2020

Я раньше этого не делал, но вы можете попробовать это:

rest_model.fromMap(Map<String, dynamic> map) {
  this.rest_name = map['rest_name'];
  this.rest_lat_long = map['rest_lat_long'];
  this.city_lat_long = map['city_lat_long'];
  this.rest_address['rest_email'] = map['rest_address']['rest_email'];
  this.rest_address['rest_phone'] = map['rest_address']['rest_phone'];
  this.rest_address['rest_website'] = map['rest_address']['rest_website'];
  this.rest_food_list = map['rest_food_list'].map((Map<String, dynamic> restFood) {
    Map<String, dynamic> food = {
      'calories_plate': restFood['calories_plate'],
      'food_name': restFood['food_name'],
      'price': restFood['price'],
    };
    return food;
  }).toList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...