我正在尝试在侦听文档快照时捕获firstore插件引发的错误。该错误被引发在调试日志中,但是在catch错误或处理错误时我无法访问它。这是插件需要的增强功能还是有办法?
调试错误
I / System.out(16041):com.google.firebase.firestore.FirebaseFirestoreException:PERMISSION_DENIED:缺少权限或权限不足。
这是我的代码,我尝试了多种方法,但是没有用
export const MakeComponent = props => {
const { path, value, info, update } = props;
const [val, setVal] = useState();
// get initial state after initial render
useEffect(() => {
setVal(value)
}, [])
console.log(value, val); // abc undefined then will log abc abc
return (...)
}
_getUserCollection.document(uid).snapshots();
_getUserCollection.document(uid).snapshots().handleError((onError) {
print(onError.toString());
});
try {
_getUserCollection.document(uid).snapshots();
} catch (e) {
print(e);
}
try {
_getUserCollection.document(uid).snapshots();
} on PlatformException catch (e) {
print(e.toString());
}
答案 0 :(得分:2)
“缺少权限或权限不足”表示您的查询违反了您的安全规则之一。您将需要检查这些规则,并确保它们允许您打算执行的查询。
documentation for security rules众多,有必要了解它们的工作方式,以便从Web和移动客户端有效地使用Firestore。
您无法从Firestore查询中捕获错误并非正确。您不能使用try / catch-必须将错误处理程序传递给listen()。
答案 1 :(得分:1)
我遇到了同样的问题。 PERMISSION_DENIED即将出现在日志中,但我想自己捕获该错误,以便将其显示给用户。我在GitHub上发现了这个问题:
Firebase - native error messages not provided issue
它指出,已经做了很多工作来改善Firebase中的错误处理。所以我昨天花了我的应用程序升级到最新版本的firebase_auth(在撰写本文时为0.18.0),现在我可以捕获并处理如下的PERMISSION_DENIED错误:
return StreamBuilder<List<DistanceDocSnapshot>>(
stream: _eventStream,
builder: (BuildContext context,
AsyncSnapshot<List<DistanceDocSnapshot>> snapshot) {
if (snapshot.hasError) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
'Error retrieving events: ${snapshot.error.toString()}',
style: TextStyle(fontSize: 20.0),
textAlign: TextAlign.center,
),
);
}
if (snapshot.hasData) {
// Handle data as desired
}
}
);
在下面的屏幕快照Screenshot of error on my app中可以看到它的工作原理(由于我没有足够的代表来嵌入图像,我不得不提供屏幕截图的链接)
我的代码布局与您的代码不同,但是我认为,如果您只升级firebase_auth版本,您的代码将按预期开始工作。