从Flatter项目的firebase实时数据库中获取单个条目

从Flatter项目的firebase实时数据库中获取单个条目,firebase,flutter,firebase-realtime-database,Firebase,Flutter,Firebase Realtime Database,我正在用firebase实时数据库在我的颤振项目中实现CRUD操作。 我在Firebase的项目中有一个实时数据库。firebase数据库结构如下图所示 我可以成功地编写单个条目,并从DeviceTokens读取所有条目。然而,我所面临的问题是在尝试从DeviceTokens读取和显示单个条目时 我想根据设备令牌的id从设备令牌中获取任何条目,并显示该id的设备令牌和订阅值 到目前为止,我已经尝试了两种方法 方法1: final dbRef = FirebaseDatabase.instanc

我正在用firebase实时数据库在我的颤振项目中实现CRUD操作。 我在Firebase的项目中有一个实时数据库。firebase数据库结构如下图所示

我可以成功地编写单个条目,并从DeviceTokens读取所有条目。然而,我所面临的问题是在尝试从DeviceTokens读取和显示单个条目时

我想根据设备令牌的id设备令牌中获取任何条目,并显示该id的设备令牌和订阅值

到目前为止,我已经尝试了两种方法

方法1:

final dbRef = FirebaseDatabase.instance.reference().child('DeviceTokens');

FutureBuilder(
          future: dbRef.once(),
          builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
            if (snapshot.hasData) {
              Map<dynamic, dynamic> values = snapshot.data.value;
              values.forEach((key, value) {
                print('The values are $values');
              });
            }
          },
        ),
final dbRef=FirebaseDatabase.instance.reference().child('DeviceTokens');
未来建设者(
future:dbRef.one(),
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasData){
映射值=snapshot.data.value;
values.forEach((键,值){
打印(“值为$values”);
});
}
},
),
这会将所有条目作为键值对返回:

值为{a136634e4045b9a9:{订阅:1,设备令牌:asdfadfgb-ikfghoiwrutf08rhgk-enf gh98edf7 gu0sdfjnv-sdjfu-0sdg},ssdf4r34terf:{订阅:1,设备令牌:sdfasdfasdfasdfasdf9q04urq3fo4tiq3wrng},b66080b213607d48:{订阅:0,设备令牌:dmnjjuuuuthz5x87x6jws:APA91bEszXYEVMf6u-imgoi4rafgesyzvvgtsrx5zj72od21vuqji47qjshnjmcbngohyv18eazl40rkrstfqwjajdkfpifa9rw_EhhLKwmz5KDWC-h2cdbgyxl-d7PFhLt},d021bf47db5bb489:{订阅:1}

方法2:到目前为止对我来说最好的案例

FutureBuilder(
          future: dbRef
              .orderByChild('device_token')
              .equalTo(
                  'asdfadfgb ikfghoiwrutf08rhgk enf gh98edf7 gu0sdfjnv sdjfu 0sdg').once(),
          builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
            if (snapshot.hasData) {
              Map<dynamic, dynamic> values = snapshot.data.value;
              values.forEach((key, value) {
                print('The values are $values');
              });
            }
          },
        ),
FutureBuilder(
未来:dbRef
.orderByChild('device_token'))
埃奎尔托先生(
“asdfadfgb ikfghoiwrutf08rhgk enf gh98edf7 gu0sdfjnv sdjfu 0sdg”)。一次(),
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasData){
映射值=snapshot.data.value;
values.forEach((键,值){
打印(“值为$values”);
});
}
},
),
在这种情况下,它只返回我正在查找的条目,但是我无法单独打印设备\u令牌订阅的数据

我的问题是

  • 如何根据条目的ID(例如:a136634e4045b9a9)而不是通过设备令牌查询条目
  • 查询数据后,如何仅显示/打印设备\u令牌订阅的