从flutter项目的Firebase实时数据库中获得一个条目

时间:2020-09-01 07:51:49

标签: firebase flutter firebase-realtime-database

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

Database structure

我可以成功写入一个条目并从 DeviceTokens 中读取所有条目。但是,面临的问题是尝试从 DeviceTokens 中读取和显示单个条目时。

我想根据 id DeviceTokens 中获取任何条目,并显示 device_token 已订阅该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');
              });
            }
          },
        ),

这将返回所有条目作为键值对:

的值是{a136634e4045b9a9:{订阅:1,device_token:asdfadfgb ikfghoiwrutf08rhgk ENF gh98edf7 gu0sdfjnv sdjfu 0sdg},ssdf4r34terf:{订阅:1,device_token:sdfasdfasdfasdfasdf9q04urq3fo4tiq3wrng},b66080b213607d48:{订阅:0,device_token:dmnjjUuuTHWZS5X87x6jwS :APA91bEszXYEVMf6u-IMGoi4RaFgESYzVVtSRX5zJ72OD21vUqLJi47QjshNjmCBngOHyv18EaZL40RKRSTFQWjAJdKFPIFA9rW_EhhLKwmz5KDw_b} b {b}

方法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');
              });
            }
          },
        ),

在这种情况下,它仅返回我要查找的条目,但是我无法分别打印出 device_token subscribed 数据。

我的问题是

  1. 我如何根据其ID(例如a136634e4045b9a9)而不是device_token来查询条目。
  2. 查询数据后,如何仅显示/打印 device_token 已订阅

0 个答案:

没有答案