首页 > 解决方案 > 颤抖着在firebase中获得名字

问题描述

当我尝试学习颤振和火力时遇到问题。我正在尝试访问 Google 帐户的名称,但由于类型不兼容,我无法访问。myHomePage只是我的应用程序的另一个页面。

这是有问题的代码段。

class _BodyState extends State<Body> {
  User user ;

  void click() {
    signInWithGoogle().then((user) => {
      this.user = user as User,
      Navigator.push(context,
    MaterialPageRoute(builder: (context) => MyHomePage(this.user.displayName)))
    });
  }

  Widget googleLoginButton(){
    return OutlineButton(
        onPressed: this.click,
      shape : RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(45)),
      splashColor: Colors.grey,
      borderSide: BorderSide(color: Colors.grey),
      child: Padding(padding: EdgeInsets.fromLTRB(0, 10, 0, 10),
      child: Row(
        mainAxisSize: MainAxisSize.min,
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Image(image: AssetImage('assets/google_logo.png'), height: 35),
          Padding(
              padding: EdgeInsets.only(left: 10),
              child: Text('Sign in with Google',
                  style: TextStyle(color: Colors.grey,
                      fontSize: 25)))],
      ))

    );
  }
  @override
  Widget build(BuildContext context) {
    return Align(
        alignment: Alignment.center,
        child: Padding(
            padding: EdgeInsets.all(10),
            child: TextField(
              decoration: InputDecoration(
                prefixIcon: Icon(Icons.person),
                labelText: "Type your name : ",
                border: OutlineInputBorder(
                    borderSide: BorderSide(width: 5, color: Colors.black)),
                suffixIcon: IconButton(
                  icon: Icon(Icons.done),
                  splashColor: Colors.orange,
                  tooltip: "Submit",
                  onPressed: this.click,
                ),
              ),
            )));
  }
}

它将显示的错误是这样的:

Unhandled Exception: type 'String' is not a subtype of type 'User'

我了解该类型不兼容,但您可以看到下面的代码(错误的主要部分):

class _BodyState extends State<Body> {
      User user ;
    
      void click() {
        signInWithGoogle().then((user) => {
          this.user = user as User,
          Navigator.push(context,
        MaterialPageRoute(builder: (context) => MyHomePage(this.user.displayName)))
        });
      }

我尝试了很多次并找到了其他一些教程,但我无法解决这个问题。方法中的
after是一个字符串,其中包含用户的信息。我想问一下我将如何访问 Google 帐户的名称?userthensignInWithGoogle

标签: firebasefluttergoogle-authentication

解决方案


FlutterFire 示例中的signInWithGoogle()函数返回一个未来,它有一个用户属性。尝试:UserCredential

signInWithGoogle().then((userCredential) => {
      this.user = userCredential.user;
      Navigator.push(context,
    MaterialPageRoute(builder: (context) => MyHomePage(this.user.displayName)))
    });

推荐阅读