未为类型“ UserCredential”定义方法“ sendEmailVerification”。火基扑动

时间:2020-10-10 07:08:18

标签: firebase flutter dart firebase-authentication

我正在关注this blog post,以便在用户注册后向用户发送电子邮件验证,这是我在执行sendEmailVerification()时遇到的问题

未为类型“ UserCredential”定义方法“ sendEmailVerification”。 尝试将名称更正为现有方法的名称,或定义一个名为'sendEmailVerification

的方法

但是博客文章的问题在于,已弃用了某些东西,除此问题外,我设法解决了其中大部分问题。

这是我的代码:-(您可以在import语句中看到包的名称)

    import 'dart:async';
    
    import 'package:firebase_auth/firebase_auth.dart' as auth;
    import 'package:cloud_firestore/cloud_firestore.dart';
    
    class Auth {
      final auth.FirebaseAuth _firebaseAuth = auth.FirebaseAuth.instance;
    
      Future<String> signUp(String email, String password) async {
        try {
          final user = await _firebaseAuth
              .createUserWithEmailAndPassword(email: email, password: password);
          try {
            await user.sendEmailVerification(); // <== The error happens here
            return user;
          } catch (e) {
            print('Code was not sent!');
          }
        } catch (e) {
          print('An error occurred');
        }
      }
    }

您能帮我解决问题吗?谢谢!

3 个答案:

答案 0 :(得分:3)

尝试以下操作:

await user.user.sendEmailVerification();

由于createUserWithEmailAndPassword()返回一个UserCredential的实例,并且由于类UserCredential具有一个名为user的属性,该属性返回了一个User的实例。

因此,您可以使用属性user来调用类User中的方法sendEmailVerification()

答案 1 :(得分:1)

createUserEmailAndPassword()返回一个Future<UserCredential>,并且一个UserCredential对象没有名为sendEmailVerification的方法。这就是错误消息所抱怨的。

如果您要使用UserCredential,则可以使用其user属性,像这样请求电子邮件验证:

try {
    final credential = await _firebaseAuth.createUserWithEmailAndPassword(email: email, password: password);
    await credential.user.sendEmailVerification();
    return credential.user;
} catch (e) {
    print('Code was not sent!');
}

答案 2 :(得分:0)

需要注意的一件事是,在我尝试使用不同的电子邮件地址之前,我无法使其正常工作。不知何故,我的第一个电子邮件地址被 firebase 弄乱了。