2017-09-20 2 views
0

Mes données est quelque chose comme ceci:Firebase-Dart Filtrage des données

{ 
    "members": [ 
    { 
     "type": "alpha", 
     "name": "John" 
    }, 
    { 
     "type": "alpha", 
     "name": "Jane" 
    }, 
    { 
     "type": "beta", 
     "name": "Renata" 
    }, 
     { 
     "type": "beta", 
     "name": "Richard" 
    } 
    ] 
} 

Si je y accéder comme suit, je reçois la liste de tous les membres:

DatabaseReference ref = database().ref('members') 
ref.onValue.listen((e) { 
    var members = e.snapshot.val(); 
}); 

Cependant, si je tente de filtrer les données, comme suit, je reçois null.

DatabaseReference ref = database().ref('members').orderByValue().equalTo("alpha", "type"); 
ref.onValue.listen((e) { 
    var members = e.snapshot.val(); 
}); 

Comment puis-je obtenir des objets uniquement avec "type" "alpha"?

Répondre

1

Votre référence members correspond à un List d'objets, et aucun des enfants immédiats du List sont des chaînes comme "alpha" pour que votre requête retourne orderByValue().equalTo()null. L'argument "type" que vous transmettez recherche dans les index de la liste (0, 1, etc.) plutôt que dans les objets enfants ("type", "name").

Au lieu de cela, vous pouvez utiliser orderByChild():

DatabaseReference ref = database().ref().child('members').orderByChild("type").equalTo("alpha"); 

Vous pouvez constater que vous obtenez un List avec quelques trous, si les alphas ne sont pas au début:

[{name: John, type: alpha}, null, {name: Jane, type: alpha}] 

Vous peut supprimer les valeurs null avec

members = new List<Object>.from(members)..remove(null);