我想在Firebase中写入数据,但出现权限错误,这是我尝试的操作:
void initState() {
super.initState();
testFirebase();
}
Future testFirebase() async {
initUser();
//Initialize Firebase
final FirebaseApp firebaseApp = await FirebaseApp.configure( ... );
final FirebaseDatabase database = new FirebaseDatabase(app: firebaseApp);
database.reference().child('counter').push().set(<String, String>{
'var': 'test'
});
}
Future initUser() async {
googleUser = await _ensureLoggedInOnStartUp();
if (googleUser == null) {
setState(() {
state.isLoading = false;
});
} else {
var firebaseUser = await logIntoFirebase();
}
}
这是我的Firebase规则:
google-services.json文件已添加到应用的根目录:
结果:
我收到以下错误消息:
我也尝试过:
但这不起作用,这让我发疯,我不明白...
任何的想法?
最佳答案
快速的初步检查是您需要await initUser()
。所以:
Future testFirebase() async {
await initUser();
//Initialize Firebase
final FirebaseApp firebaseApp = await FirebaseApp.configure( ... );
否则,我希望对数据库的调用在身份验证完成之前开始。
更新:我刚刚验证了以下简单代码的正确性:
void _signin() async {
print("Calling __actuallySignin");
__actuallySignin();
print("called __actuallySignin and waited");
}
void __actuallySignin() async {
print("Calling signIn...");
await FirebaseAuth.instance.signInAnonymously();
print("called signIn... and waited");
}
打印:
flutter: Calling __actuallySignin
flutter: called __actuallySignin and waited
flutter: Calling signIn...
...
flutter: called signIn... and waited
因此,
__actuallySignin
方法在登录之前完成。要使调用代码等待结果,请添加await
:await __actuallySignin();
哪个输出:
flutter: Calling __actuallySignin
flutter: Calling signIn...
flutter: called signIn... and waited
flutter: called __actuallySignin and waited