首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Flutter -如何在Firebase中写入数据(实时ddb):权限被拒绝

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

Stack Overflow用户
提问于 2018-09-07 03:07:08
回答 3查看 3.6K关注 0票数 0

我想在Firebase中写入数据,但我得到了一个权限错误,下面是我尝试的方法:

代码语言:javascript
运行
复制
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')

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

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-07 14:49:59

只是将await添加到initUser()并不起作用,数据库也没有被正确寻址。

解决方案:

代码语言:javascript
运行
复制
FirebaseDatabase.instance.reference().child ...

而不是:

代码语言:javascript
运行
复制
final FirebaseApp firebaseApp = await FirebaseApp.configure( ... );

final FirebaseDatabase database = new FirebaseDatabase(app: firebaseApp);
票数 1
EN

Stack Overflow用户

发布于 2018-09-07 08:00:05

快速的初始检查是您需要await initUser()。所以:

代码语言:javascript
运行
复制
Future testFirebase() async {

    await initUser();

    //Initialize Firebase
    final FirebaseApp firebaseApp = await FirebaseApp.configure( ... );

否则,我预计对数据库的调用将在auth完成之前开始。

更新:我刚刚用这段简单的代码验证了这一点:

代码语言:javascript
运行
复制
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");
}

这将打印:

代码语言:javascript
运行
复制
flutter: Calling __actuallySignin
flutter: called __actuallySignin and waited
flutter: Calling signIn...
...
flutter: called signIn... and waited

因此,__actuallySignin方法是在登录完成之前完成的。为了让调用代码等待结果,您添加了await

代码语言:javascript
运行
复制
await __actuallySignin();

以下哪项输出:

代码语言:javascript
运行
复制
flutter: Calling __actuallySignin
flutter: Calling signIn...
flutter: called signIn... and waited
flutter: called __actuallySignin and waited
票数 2
EN

Stack Overflow用户

发布于 2019-01-04 03:51:02

通过不使用插件文档中列出的方法访问数据库引用,我能够解决这个问题:

代码语言:javascript
运行
复制
final FirebaseDatabase database = FirebaseDatabase(app: app);
this.databaseRef = database.reference();

而是使用这种方法:

代码语言:javascript
运行
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52210694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档