6
votes

Création d'une sous-collection dans un document à partir de l'application Flutter

J'essaie de créer une sous-collection dans un document et de définir les données sur les documents de la sous-collection créée.

J'ai essayé ceci mais le programme plante à chaque fois que je l'exécute.

   flutter: EVENT StorageTaskEventType.success
   *** First throw call stack:
   (
    0   CoreFoundation                      0x0000000111eb61bb __exceptionPreprocess + 331
    1   libobjc.A.dylib                     0x0000000111454735 objc_exception_throw + 48
    2   Runner                              0x000000010ce707b1 -[FIRFirestore documentWithPath:] + 257
    3   Runner                              0x000000010d10662c getDocumentReference + 124
    4   Runner                              0x000000010d109879 -[FLTCloudFirestorePlugin handleMethodCall:result:] + 2665
    5   Flutter                             0x000000010e5b99a2 __45-[FlutterMethodChannel setMethodCallHandler:]_block_invoke + 115
    6   Flutter                             0x000000010e5d6616 _ZNK5shell21PlatformMessageRouter21HandlePlatformMessageEN3fml6RefPtrIN5blink15PlatformMessageEEE + 166
    7<…>

J'ai également cherché en ligne mais je ne trouve aucune documentation à ce sujet.

Des idées?

Lorsque j'essaye le code ci-dessus, l'application plante avec le message suivant

  await Firestore.instance
      .collection('/path')
      .document("documentPath")
      .collection('/subCollectionPath')
      .document()
      .setData({
    'TestData': "Data",
  }).then((onValue) {
    print('Created it in sub collection');
  }).catchError((e) {
    print('======Error======== ' + e);
  });

Connexion perdue à l'appareil.


3 commentaires

Essayez - Firestore.instance .collection ('/ path') .document ("documentPath") .collection ('/ subCollectionPath'). Reference () .document () .setData ({'TestData': "Data" ,}). then ((onValue) {print ('Créé dans une sous-collection');}). catchError ((e) {print ('====== Erreur ========' + e);});


Cela n'a pas fonctionné. La même chose s'est produite. L'application a planté.


J'ai modifié la question pour ajouter le message. Voir la question ci-dessus.


4 Réponses :


7
votes

J'ai découvert le problème. J'utilisais la mauvaise syntaxe. La syntaxe correcte est

    Firestore.instance.collection('path').document("documentPath").collection('subCollectionPath').setData({});

La principale différence ici est que les barres obliques ont été supprimées du nom des chemins.


0 commentaires

10
votes
 final databaseReference = Firestore.instance;
databaseReference.collection('main collection name').document( unique id).collection('string name').document().setData(); // your answer missing **.document()**  before setData
this is the right Syntex

1 commentaires

pouvez-vous s'il vous plaît laissez-moi savoir comment puis-je récupérer des données après avoir stocké des données dans la structure ci-dessus. Je vous remercie.



1
votes

Pour récupérer les données de sous-collection, utilisez cette requête

var query  = await databaseReference.collection('Staffs').document("horlaz229@gmail.com"). collection('Wallet').getDocuments()


0 commentaires

2
votes

Voici la solution, si vous souhaitez créer une sous-collection dans une transaction Firestore:

Firestore.instance.runTransaction((Transaction tx) {
    tx.set(Firestore.instance.collection('path').document('documentPath')
        .collection('subCollectionPath').document(), {'TestData', 'Data'});
})

REMARQUE: vous ne pouvez pas créer une sous-collection vide, vous devez créer la sous-collection avec au moins un document. Si vous essayez de créer la sous-collection avec le champ de données vide, Firestore créera un document vide.


0 commentaires