2017-09-20 7 views
0

私のデータは、このようなものです:次のように私はそれにアクセスする場合、私はすべてのメンバーのリストを取得Firebase-ダートデータのフィルタリング

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

:しかし

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

、私がしようとした場合次のようにデータをフィルタリングすると、nullと表示されます。私は、「タイプ」、「アルファ」でのみオブジェクトを取得するにはどうすればよい

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

答えて

1

あなたmembers参照がオブジェクトのListに対応し、Listにおける直接の子のどれもが"alpha"のような文字列ではないので、あなたのorderByValue().equalTo()クエリはnullを返します。子オブジェクト("type""name")のキーではなく、リスト内のインデックス(0、、など)で検索している引数は"type"です。

代わりに、あなたはorderByChild()を使用することができます。

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

あなたはアルファが先頭ではない場合は、その中にいくつかの穴とListを取得することがあります:

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

あなたは

members = new List<Object>.from(members)..remove(null); 
nullの値を削除できます
関連する問題