我想在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();
}
}这是我的规则:

google-services.json文件被添加到app根目录:

结果:
我得到以下错误消息:

我也尝试过的 :
push().setValue('2')
但它不起作用,这让我发疯,我不明白...
有什么想法吗?
发布于 2018-09-07 14:49:59
只是将await添加到initUser()并不起作用,数据库也没有被正确寻址。
解决方案:
FirebaseDatabase.instance.reference().child ...而不是:
final FirebaseApp firebaseApp = await FirebaseApp.configure( ... );
final FirebaseDatabase database = new FirebaseDatabase(app: firebaseApp);发布于 2018-09-07 08:00:05
快速的初始检查是您需要await initUser()。所以:
Future testFirebase() async {
await initUser();
//Initialize Firebase
final FirebaseApp firebaseApp = await FirebaseApp.configure( ... );否则,我预计对数据库的调用将在auth完成之前开始。
更新:我刚刚用这段简单的代码验证了这一点:
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发布于 2019-01-04 03:51:02
通过不使用插件文档中列出的方法访问数据库引用,我能够解决这个问题:
final FirebaseDatabase database = FirebaseDatabase(app: app);
this.databaseRef = database.reference();而是使用这种方法:
this.databaseRef = FirebaseDatabase.instance.reference();当您使用多个Flutter文档时,您将看到许多方法可用于从实时数据库读取公共信息,但只有一种方法可用于读取依赖于auth变量的信息。这是我的经验。
工作方式:https://marcinszalek.pl/flutter/firebase-database-flutter-weighttracker/
非工作方法与插件文档相关联:https://pub.dartlang.org/packages/firebase_database#-example-tab-
此外,我的项目是使用主Firebase Flutter文档配置的,用于将我的应用程序链接到Firebase:https://firebase.google.com/docs/flutter/setup
https://stackoverflow.com/questions/52210694
复制相似问题