Flutter中Firebase实时数据库查询报错:无法创建request节点获取用户名
Firebase实时数据库查询异常问题排查
我是Firebase实时数据库新手,在学校项目中使用时查询功能异常。
数据库结构
{"cat": {"-NKKUp_AiD98WHUvnfR0": {"birthYear": "2001","imageUrl": "***","name": "Tom"}},"user": {"uFkR1Z1UoVTVUmbpDmgU7BXGT852": {"admin": true,"email": "ziaddddd@gmail.com","fullName": "ziad212","phoneNo": "011111111"}}}
需求与问题
我想创建新节点request,其子节点包含当前用户uId、猫名和用户名,但获取用户名时遇到问题。
代码实现
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>
问题分析与解决
核心问题:查询逻辑冗余且错误
你的数据库user节点的key就是用户uId,完全不需要用orderByValue().equalTo(uId)做查询,直接通过uId定位用户节点即可。当前查询方式不仅多余,还触发了索引缺失的错误。
修复后的代码
static requestCat(catName) async { final uId = AuthenticationRepository.auth.currentUser!.uid; // 直接通过uId获取用户节点,无需查询 final userSnapshot = await DbHelper.database.ref('user/$uId').get(); if (userSnapshot.exists) { final user = userSnapshot.value as Map; var userName = user['fullName']; DatabaseReference ref = DbHelper.database.ref('request'); await ref.push().set({ 'catName': catName, 'userName': userName, 'userId': uId }); } else { // 处理用户不存在的异常情况 print('用户节点不存在'); } } }
额外优化说明
- 增加
userSnapshot.exists判断,避免用户节点不存在时的类型转换错误 - 给
set方法添加await,确保数据写入完成后再执行后续逻辑(如果有)
内容的提问来源于stack exchange,提问作者Ziad Assem
相关产品推荐
相关产品推荐

