【问题标题】:Firebase Realtime database doesn't add data but Firebase Authentication and Firestore work perfectlyFirebase 实时数据库不会添加数据,但 Firebase 身份验证和 Firestore 可以完美运行
【发布时间】:2021-09-14 21:55:48
【问题描述】:

有一个与此类似的问题,但已停止。所以,我放了这个。

我所做的是在 android studio 中创建了一个颤振应用程序。我可以成功登录,但无法更新数据库。

这是我的 Firebase 初始化代码

        WidgetsFlutterBinding.ensureInitialized();
      await Firebase.initializeApp();
      runApp(MyApp());
    }

DatabaseReference userRef =
    FirebaseDatabase.instance.reference().child("users");

验证并写入数据库的代码

     final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;

  void registerNewUser(BuildContext context) async {
    final User firebaseUser = (await _firebaseAuth
            .createUserWithEmailAndPassword(
                email: emailTextEditingController.text,
                password: passwordTextEditingController.text)
            .catchError((errMsg) {
      displayToastMessage("Error: " + errMsg.toString(), context);
    }))
        .user;

    if (firebaseUser != null) {
      //save user to database

      Map userDataMap = {
        "name": nameTextEditingController.text.trim(),
        "email": emailTextEditingController.text.trim(),
        "phone": phoneTextEditingController.text.trim(),
      };

      userRef.child(firebaseUser.uid).set(userDataMap);
      displayToastMessage(
          "Congratulation, your account has been created", context);
    }

Firebase 规则

 {
  "rules": {
    ".read": true,
    ".write": true
  }
}

此时用户已通过身份验证,但是,在实时数据库中,没有值被更新?当我调试时,它达到了目的

Map userDataMap = {

并完全跳过"name": nameTextEditingController.text.trim(), "email": emailTextEditingController.text.trim(), "phone": phoneTextEditingController.text.trim(),} 调试器控制台很正常,我没有收到任何错误。有什么办法可以更广泛地调试这个吗?或者我错过了什么?

enter image description here

enter image description here

【问题讨论】:

  • 替换新的google-service.json时它可以工作
  • 我已经更换了一个新的 google-service.json 但仍然无法正常工作.. @GaneshMB

标签: firebase flutter firebase-realtime-database


【解决方案1】:

我的实时数据库遇到了类似的问题。 我修复它的方法是像这样传递我初始化的firebase应用程序和rtdb url:

FirebaseDatabase _database =
        FirebaseDatabase(app: firebaseApp, databaseURL: url);

然后用这个实例更新实时db

    DatabaseReference _ref = _database.reference();
    _ref.child("Movies").push().child("MovieTitle").push().set("new movie");

这是我设法让它工作的唯一方法

【讨论】:

  • 请问您从哪里获得 firebaseApp 和 url?
  • 对于 firebaseApp,您只需将这一行:await Firebase.initializeApp(); 放入变量中以供以后使用,并且 URL 只是本地模拟器的地址或 firebase 控制台中的地址
【解决方案2】:

我正在学习同样的颤振课程,这也发生在我身上, 试试flutter clean。它对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 2017-12-26
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2021-01-22
    相关资源
    最近更新 更多