【问题标题】:Flutter-Firebase how to push Future<FirebaseUser> to another classFlutter-Firebase 如何将 Future<FirebaseUser> 推送到另一个类
【发布时间】:2021-08-08 15:25:48
【问题描述】:

我正在尝试创建身份验证表单。 用户可以使用电子邮件和密码进行注册。 eMailandPassword 注册成功后,用户被重定向到验证页面。我需要用户的信息,以便我可以将他的电话号码注册到 firebase。 这是我的 createUser 函数;

    void createUser() async {
        dynamic result = await _auth.createNewUser(
            _nameController.text, _emailContoller.text, _passwordController.text);
        if (result == null) {
          print('Email is not valid');
        } else {
          print(result.toString());
          _nameController.clear();
          _passwordController.clear();
          _emailContoller.clear();
    
          Future<FirebaseUser> user = _auth.getCurrentUser();
**/////HOW TO PASS user to the PhoneVerification class. ??**

          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => PhoneVerification(user:user)),
          );
        }
      }

如果我作为 Future 用户通过,我无法在 PhoneVerification 类中访问其值。

class PhoneVerification extends StatefulWidget {
  final Future<FirebaseUser> user;
  const PhoneVerification({Key? key, required this.user}) : super(key: key);

  @override
  _PhoneVerificationState createState() => _PhoneVerificationState();
}

有什么建议吗?提前谢谢你

【问题讨论】:

  • 您在哪里尝试访问PhoneVerification 类中的用户值?
  • 为什么需要 Future?只需等待并使用 FirebaseUser 作为类型
  • @FrankvanPuffelen 你认为我在电话验证时不需要用户的价值吗?

标签: firebase flutter firebase-authentication


【解决方案1】:
void createUser() async {
    dynamic result = await _auth.createNewUser(
        _nameController.text, _emailContoller.text, _passwordController.text);
    if (result == null) {
      print('Email is not valid');
    } else {
      print(result.toString());
      _nameController.clear();
      _passwordController.clear();
      _emailContoller.clear();

      FirebaseUser user = await _auth.getCurrentUser();

      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => PhoneVerification(user:user)),
      );
    }
  }

class PhoneVerification extends StatefulWidget {
 final FirebaseUser user;
 const PhoneVerification({Key? key, required this.user}) : super(key: key);

 @override
 _PhoneVerificationState createState() => _PhoneVerificationState();
}

【讨论】:

    【解决方案2】:
      void createUser() async {
            dynamic result = await _auth.createNewUser(
                _nameController.text, _emailContoller.text, _passwordController.text);
            if (result == null) {
              print('Email is not valid');
            } else {
              print(result.toString());
              _nameController.clear();
              _passwordController.clear();
              _emailContoller.clear();
        
              FirebaseUser user = await _auth.getCurrentUser();//<=== await here
    
    
              Navigator.push(
                context,
                MaterialPageRoute(builder: (context) => PhoneVerification(user:user)),
              );
            }
          }
    

    但正如弗兰克所说,您确定要将 FirebaseUser 对象传递给您的其他班级吗?该文档很好地解释了如何管理电话身份验证。

    【讨论】:

    • 你认为我在手机验证时不需要用户的价值吗?我以为我需要它
    猜你喜欢
    • 2018-05-26
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    相关资源
    最近更新 更多