【问题标题】:Flutter - function to create user using firebaseFlutter - 使用firebase创建用户的功能
【发布时间】:2021-05-23 16:34:26
【问题描述】:

我正在自学 Flutter,我正在一个小项目中使用 Firebase。我正处于登录和注册阶段,所以我需要使用一个名为 firebase_auth: ^ 0.20.0 + 1 的插件。 但是,我的代码中出现了一个点,我不知道是什么原因导致的。 当我创建用户时,我在 .createUserWithEmailAndPassword 中指定了一个电子邮件和一个密码,如果它工作它应该返回一个表明创建成功的函数,没有错误日志,因为我没有完成代码并执行了这一步,但是错误在我在这个函数中使用的语法中,它似乎不符合firebase的语法,我一定做错了什么。他说这些行是错误的 .then ((user) {firebaseUser = user;

import 'package:firebase_auth/firebase_auth.dart';
import 'package:scoped_model/scoped_model.dart';
import 'dart:async';
import 'package:flutter/material.dart';

class UserModel extends Model {
  //usuario atual

  FirebaseAuth _auth = FirebaseAuth.instance;
  FirebaseUser firebaseUser;
  Map<String, dynamic> userData = Map();

  bool isLoading = false;
  void signUp(Map<String, dynamic> userData, String pass, VoidCallback onSucess,
      VoidCallback onFail) {
    isLoading = true;
    notifyListeners();
    _auth
        .createUserWithEmailAndPassword(
            email: userData["email"], password: pass)
        .then((user) async{
      firebaseUser = user;

      onSucess();
      isLoading = false;
      notifyListeners();
    }).catchError((e) {
      onFail();
      isLoading = false;
      notifyListeners();
    });
  }

  void signIn() async {
    isLoading = true;
    notifyListeners();
    await Future.delayed(Duration(seconds: 3));

    isLoading = false;
    notifyListeners();
  }

  void recoverPass() {}

  //bool isLoggedIn() {}
}

class FirebaseUser {}

【问题讨论】:

  • 虽然 .then 可以完成这项工作,但最好在 try catch 块中使用 async 和 await 以避免回调地狱

标签: flutter firebase-authentication


【解决方案1】:

createUserWithEmailAndPassword 的调用会创建一个用户并返回一个Future&lt;UserCredential&gt;

then(负责处理此结果的Future 部分)中,将UserCredential 分配给定义为firebaseUserfirebaseUser 变量。并且错误信息告诉你FirebaseUserUserCredential 不是兼容的类型。

要从UserCredential 获取FirebaseUser,请使用:

.then((credentials) async{
    firebaseUser = credentials.user;

根据您使用的firebase_auth 插件的版本,您可能需要将firebaseUser 声明为:

User firebaseUser

这是最新版本的 FlutterFire 库中的正确类型,而旧版本将其命名为 FirebaseUser

我已经链接了上面的相关参考文档,因为我发现在解决这些类型的问题时最有用。我强烈建议您在学习 API 时保持打开状态。

【讨论】:

  • 感谢弗兰克,更改效果很好。
猜你喜欢
  • 2018-08-19
  • 2018-07-22
  • 2018-12-07
  • 2018-06-04
  • 2020-11-30
  • 2023-03-18
  • 2021-06-14
  • 2020-06-10
  • 2018-03-27
相关资源
最近更新 更多