Je dois ajouter des données à une carte ou à une carte de hachage avant une boucle for ..., ajouter des données à la carte pendant la boucle for ... puis créer le document avec toutes les données après la boucle.
Dans Java pour Android j'ai utilisé:
Map<String, Object> createDoc = new HashMap<>();
createDoc.put("type", type);
createDoc.put("title", title);
for (int x = 0; x < sArray.size(); x++) {
createDoc.put("data " + x,sArray.get(x));
}
firebaseFirestoreDb.collection("WPS").add(createDoc);
Ma question est la suivante: comment créer le document et en obtenir immédiatement l'ID pour le mettre à jour/le fusionner avec le reste des données? Ou existe-t-il un moyen d'ajouter des données à une carte dans Dart?
La seule chose que j'ai trouvée dans Dart est:
Map<String, Object> stuff = {'title': title, 'type': type};
et dans la boucle for ...:
stuff = {'docRef $x': docId};
et après la boucle for ...:
Firestore.instance.collection('workouts').add(stuff);
qui crée un document avec seulement la dernière entrée de la boucle for ....
J'ai également importé Dart: collection pour utiliser HashMap, mais cela ne me permet pas d'utiliser
Map<String, Object> newMap = new HashMap<>();
J'obtiens l'erreur: "A value of type 'HashMap' can't be assigned to a variable of type 'Map<String, Object>'
"
Merci d'avance!
Un bloc de code équivalent à ce que vous avez écrit en Java, pour Dart, est:
Map<String, Object> createDoc = new HashMap();
createDoc['type'] = type;
createDoc['title'] = title;
for (int x = 0; x < sArray.length; x++) {
createDoc['data' + x] = sArray[x];
}
Bien sûr, Dart a inférence de type et littéraux de collection , nous pouvons donc utiliser une syntaxe plus abrégée pour les deux. Écrivons exactement la même chose d'en haut, mais avec d'autres idiomes Dart (2):
var createDoc = <String, Object>{};
createDoc['type'] = type;
createDoc['title'] = title;
for (var x = 0; x < sArray.length; x++) {
createDoc['data' + x] = sArray[x];
}
D'accord, c'est mieux, mais n'utilise toujours pas tout ce que Dart propose. Nous pouvons utiliser le littéral de la carte au lieu d'écrire deux autres lignes de code, et nous pouvons même utiliser interpolation de chaîne :
var createDoc = {
'type': type,
'title': title,
};
for (var x = 0; x < sArray.length; x++) {
createDoc['data$x'] = sArray[x];
}
J'ai également importé Dart: collection pour utiliser HashMap, mais cela ne me permet pas d'utiliser
Map<String, Object> newMap = new HashMap<>(); I get the error: `"A value of type 'HashMap' can't be assigned to a variable of type
'Carte'` "
Il n'y a pas une telle syntaxe new HashMap<>
Dans Dart. L'inférence de type fonctionne sans elle, vous pouvez donc simplement écrire Map<String, Object> map = new HashMap()
, ou comme mon exemple ci-dessus, var map = <String, Object> {}
, Ou mieux encore, var map = { 'type': type }
, Qui tapera la carte pour vous basé sur la clé et la valeur.
J'espère que ça aide!