如何正确查询Firebase实时数据库Flutter?

aiazj4mn  于 2022-12-30  发布在  Flutter
关注(0)|答案(1)|浏览(177)

我真的是新的firebase实时数据库,我没有时间学习它彻底之前,开始一个学校的项目。查询不能正常工作。
我有一个如下所示的数据库:

{
  "cat": {
    "-NKKUp_AiD98WHUvnfR0": {
      "birthYear": "2001",
      "imageUrl": "***",
      "name": "Tom"
    }
  },
  "user": {
    "uFkR1Z1UoVTVUmbpDmgU7BXGT852": {
      "admin": true,
      "email": "ziaddddd@gmail.com",
      "fullName": "ziad212",
      "phoneNo": "011111111"
    }
  }
}

我想创建一个新节点'request',并将其子节点设置为当前的uId、cat名称和userName。但是我在用户名方面遇到了问题。下面是我的代码:

static requestCat(catName) async {
    final uId = AuthenticationRepository.auth.currentUser!.uid;
    Query query = DbHelper.database.ref('user').orderByValue().equalTo(uId);

    final snapshot = await query.get();
    final user = snapshot.value as Map;

    user['key'] = snapshot.key;
    var userName = user['fullName'];
    DatabaseReference ref = DbHelper.database.ref('request');

    ref.push().set(
      {'catName': catName, 
      'userName': userName, 
      'userId': uId
      }
    );
  }
}

当我调用这个函数时,它给出了以下错误:

Error: [firebase_database/index-not-defined] Index not defined, add ".indexOn": ".value", for path "/user", to the rules
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 266:49  throw_
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/schedule_microtask.dart 49:5
_startMicrotaskLoop
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 166:15           <fn>

我做错了什么?

fdx2calv

fdx2calv1#

如错误所示,您需要对数据库执行add an index才能允许此查询。您可以在数据库的安全规则中执行此操作,通常在Firebase console中。对于此特定查询,规则为:

{
  "rules": {
    ...
    "user": {
      ".indexOn": ".value";
    }
  }
}

相关问题