我想在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规则:

android - Flutter-如何在Firebase(实时DDB)中写入数据:权限被拒绝-LMLPHP

google-services.json文件已添加到应用的根目录:

android - Flutter-如何在Firebase(实时DDB)中写入数据:权限被拒绝-LMLPHP

结果:

我收到以下错误消息:

android - Flutter-如何在Firebase(实时DDB)中写入数据:权限被拒绝-LMLPHP

我也尝试过:



但这不起作用,这让我发疯,我不明白...

任何的想法?

最佳答案

快速的初步检查是您需要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

08-18 17:49
查看更多