Avoir des problèmes avec comprendre comment je suis censé utiliser FireBase, dans un sens logique et structurel.
J'ai une base de données qu'à présent ressemble à ceci: p>
dans l'application que j'ai utilisé: p> comme toute la documentation et les guides suggèrent. P> Mais cela renvoie des cycles via tous mes documents, qui sont tous mes identifiants d'utilisateur. Je ne veux pas que cela soit un utilisateur ne devrait voir que leurs propres données. Mais si j'essaie d'essayer de le changer: P> document['store_name']
3 Réponses :
Stream<QuerySnapshot> stream = Firestore.instance.collection('stores').where('uid', isEqualTo: uid).snapshots(); But I would suggest listening to snapshot changes and then updating the variable you need.
Cela me donne une sorte de quelque part! Cela ne génère aucune erreur au moins, c'est donc quelque chose. Cela ne renvoie aucune donnée dans mon application cependant. Auparavant, je reçois des données comme .. permettez-moi de mettre à jour ma question pour vous répondre correctement.
Si vous utilisez ceci: puis faire: p> alors ce qui précède devrait obtenir uniquement les données à l'intérieur du Document CODE> UID, il ne cherchera pas les sous-collections. Si vous souhaitez accéder aux données à l'intérieur de la sous-collection d'un utilisateur, utilisez les éléments suivants: P>
child: StreamBuilder(
stream: Firestore.instance.collection('stores').document(currentUserUID).snapshots(),
builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if (snapshot.hasData) {
return ListView.builder(
shrinkWrap: true,
itemCount: snapshot.data.data.length,
itemBuilder: (context, index) =>
_buildListRows(context, snapshot.data),
);
Widget _buildListRows(BuildContext context, DocumentSnapshot document) {
return Container(
height: MediaQuery.of(context).size.height * 0.8,
child: ListView(
children: <Widget>[
Row(
children: <Widget>[
Padding(
padding: EdgeInsets.fromLTRB(10, 0, 50, 0),
child: Text(
'Business Name',
style: Theme
.of(context)
.textTheme
.body2,
),
),
Container(
height: 50,
width: 200,
padding: EdgeInsets.fromLTRB(5, 0, 5, 0),
child: TextField(
controller: _storeNameController,
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: document['store_name'],
),
),
),
],
),
Merci Peter. Je ne peux pas configurer la base de données comme vous le suggérez, car il ne le laissera tout simplement pas du tout. Dans Firebase, une fois que vous arrivez au niveau du document, la section suivante n'est pas une collection. J'ai probablement écrit cela mal et je vais le modifier. Il n'autorisera pas les champs de données sur une collection, il ne permettra que des champs de données sur un document. Je vais mettre à jour la question maintenant car je ne me suis pas rendu compte que cela n'a pas besoin de votre suggestion. C'est encore pire que je pensais.
En Firebase, vous avez une collection et à l'intérieur de chaque collection que vous avez des documents, puis à l'intérieur de chaque document, vous pouvez avoir des sous-collections ou des données pour le document.
Si vous souhaitez obtenir les données du document UID, U utilisez document (UID) code> pour obtenir cela. Si vous n'avez aucune donnée à l'intérieur de ce document, vous n'obtiendrez rien. Si vous souhaitez obtenir les données à l'intérieur des sous-collections sous ce document. Ensuite, vous faites comme dans la réponse. Ex: Sous-collection
userData code> contiendra des documents contenant des données que vous pouvez récupérer.
Vous pouvez également appeler instantané sur un document check this Stackoverflow.com/q/54479892/7015400 C'est pour JS mais appliqué sur le flotteur
Lorsque j'appelle .snapshots () sur le niveau de document, comme celui-ci: Stream: Firestore.Instance.collection ("Magasins"). Document (UID) .Snapsh ots (), je reçois l'erreur suivante. "Les références de documents doivent avoir un nombre pair de segments". Google me dit que c'est parce qu'il n'est pas possible de le faire.
Ajout d'une capture d'écran de cette base de données simple dans la question, peut être plus facile à la voir correctement qu'avec ma ventilation des niveaux. Il n'y a vraiment pas grand chose à ça.
Laissez-nous Continuez cette discussion en chat .
Peter a pu m'aider avec cette question. Mettra à jour la réponse dans la question ci-dessus.
(posté la solution au nom de l'auteur de la question afin de le déplacer dans l'espace de réponse) em>. Ceci fonctionne pour moi: P> child: StreamBuilder(
stream: Firestore.instance.collection('stores').document(currentUserUID).snapshots(),
builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if (snapshot.hasData) {
return ListView.builder(
shrinkWrap: true,
itemCount: snapshot.data.data.length,
itemBuilder: (context, index) =>
_buildListRows(context, snapshot.data),
);
Widget _buildListRows(BuildContext context, DocumentSnapshot document) {
return Container(
height: MediaQuery.of(context).size.height * 0.8,
child: ListView(
children: <Widget>[
Row(
children: <Widget>[
Padding(
padding: EdgeInsets.fromLTRB(10, 0, 50, 0),
child: Text(
'Business Name',
style: Theme
.of(context)
.textTheme
.body2,
),
),
Container(
height: 50,
width: 200,
padding: EdgeInsets.fromLTRB(5, 0, 5, 0),
child: TextField(
controller: _storeNameController,
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: document['store_name'],
),
),
),
],
),
Qu'est-ce que vous obtenez ici Stream: firestore.instance.collection ("magasins"). Document (UID) .Snapsh ots () ,?
Une erreur qui indique "les références de documents doit avoir un nombre pair de segments" qui, lorsque je le regarde en ligne signifie que vous ne pouvez pas faire un instantané () du tout au niveau du document, vous ne pouvez le faire que sur le niveau de collecte. .
Vous pouvez également faire des instantanés sur le niveau de document. Pouvez-vous confirmer l'UID que vous essayez d'interroger existe dans la collection de magasins.
Ouais, il fait mate et j'ai mis en place des captures d'impression pour me montrer l'UID à différentes étapes de l'application, chaque fois qu'il est correct. L'application tire également les données de Firebase avec succès, ce n'est que le problème est qu'il tire toutes les données, plutôt que l'utilisateur actuel.