如何显示来自实时数据库的特定数据?

How to display one particular data from Realtime Database?

在 firebase 动画列表中,如何放入条件语句或其他任何内容,以便只显示实时数据库中的一组数据?我目前可以在 ListTile 中显示所有这些,但我只想显示名称为 'Spain' 的目的地及其描述,而不是包含西班牙、意大利、美国等的所有数据库

class _TestDestinationsState extends State<TestDestinations> {
  final destdatabaseref = FirebaseDatabase.instance
      .reference()
      .child('Database')
      .child('Destinations');

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Color(0xFF4D71AC),
        elevation: 0,
        centerTitle: true,
        title: Text('Eh',
            style: TextStyle(
                fontSize: 18,
                fontWeight: FontWeight.w500,
                color: Colors.white)),
      ),
      body: SafeArea(
          child: FirebaseAnimatedList(
        itemBuilder: (BuildContext context, DataSnapshot snapshot,
            Animation<double> animation, int index) {
          return SingleChildScrollView(
            child: Column(
              children: [
                SizedBox(height: 15),
                Padding(
                  padding: const EdgeInsets.all(8),
                  child: ListTile(
                      title: Text(snapshot.value['name'],
                          style: TextStyle(fontSize: 20)),
                      subtitle: Text(snapshot.value['description'])),
                ),
              ],
            ),
          );
        },
        query: destdatabaseref,
      )),
    );
  }
}

如果我们只需要显示来自FirebaseDatabase的特定数据,我们可以使用以下逻辑:

Visibility(
 visible: snapshot.value['name'] == 'Spain',
 child: ...
),

完整的片段可以在下面找到:

class _TestDestinationsState extends State<TestDestinations> {
  final destdatabaseref = FirebaseDatabase.instance
      .reference()
      .child('Database')
      .child('Destinations');

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Color(0xFF4D71AC),
        elevation: 0,
        centerTitle: true,
        title: Text('Eh',
            style: TextStyle(
                fontSize: 18,
                fontWeight: FontWeight.w500,
                color: Colors.white)),
      ),
      body: SafeArea(
          child: FirebaseAnimatedList(
        itemBuilder: (BuildContext context, DataSnapshot snapshot,
            Animation<double> animation, int index) {
          return Visibility(
           visible: snapshot.value['name'] == 'Spain',
           child: SingleChildScrollView(
             child: Column(
               children: [
                 SizedBox(height: 15),
                 Padding(
                   padding: const EdgeInsets.all(8),
                   child: ListTile(
                       title: Text(snapshot.value['name'],
                           style: TextStyle(fontSize: 20)),
                       subtitle: Text(snapshot.value['description'])),
                 ),
               ],
             ),
           ),
          );
        },
        query: destdatabaseref,
      )),
    );
  }
}

但是更好的解决方案是检索仅基于过滤器的特定数据,这可以通过过滤我们的过滤器来完成查询 FirebaseDatabase 如下:

final destdatabaseref = FirebaseDatabase.instance
    .reference()
    .child('Database')
    .child('Destinations')
    .orderByChild('name')
    .equalTo('Spain');