dart - Flutter:通过 Google Firebase 授权时出错

标签 dart flutter google-oauth flutter-dependencies

我是 Flutter 的初学者,遇到了这样的问题。我需要做到这一点,以便在登录我的应用程序时,我的邮件显示在 firebase 中。我进行了授权,但是当我单击按钮(使用谷歌登录)时出现错误。 这是我的 pubspec.yaml:

dependencies:
  http: ^0.12.0
  flutter:
    sdk: flutter
  location: ^1.4.1 
  firebase_core: ^0.2.5
  firebase_auth: ^0.5.20
  google_sign_in: ^3.2.2

Here is the photo of problem

My project on GitHub

I can not get rid of this problem

import 'package:flutter/material.dart';
import 'package:logining/home_screen/home_screen.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';


class LoginScreen extends StatefulWidget {
  @override
  LoginScreenState createState() {
    return new LoginScreenState();
  }
}

class LoginScreenState extends State<LoginScreen> {
  String _email, _password;
  bool _obscureText = true;


GoogleSignIn googleAuth = GoogleSignIn();

  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Login'),
        ),
        resizeToAvoidBottomPadding: false,
        body: ListView(children: <Widget>[
          Container(
            child: Form(
              key: _formKey,
              autovalidate: true,
              child: Column(
                children: <Widget>[
                  SizedBox(
                    height: 50,
                  ),
                  Padding(
                    child: Image.asset(
                      'images/logo.png',
                      width: 100.0,
                      height: 100.0,
                    ),
                    padding: EdgeInsets.fromLTRB(50, 0, 50, 40),
                  ),
                  Padding(
                    padding: EdgeInsets.fromLTRB(25, 0, 50, 10),
                    child: TextFormField(
                      validator: (email) {
                        if (email.isEmpty) {
                          return 'Provide an Email';
                        }
                      },
                      style: TextStyle(
                        color: Color(0xFF01579B),
                        fontSize: 18.0,
                      ),
                      decoration: InputDecoration(
                          border: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(30),
                          ),
                          hintText: 'Enter your Email',
                          labelText: "Email",
                          icon: Padding(
                            padding: EdgeInsets.only(top: 20.0),
                            child: Icon(Icons.email),
                          )),
                      onSaved: (email) => _email = email,
                    ),
                  ),
                  Padding(
                    padding: EdgeInsets.fromLTRB(25, 0, 50, 10),
                    child: TextFormField(
                      validator: (password) {
                        if (password.isEmpty) {
                          return 'Provide an password';
                        }
                      },
                      obscureText: _obscureText,
                      style: TextStyle(
                        color: Color(0xFF01579B),
                        fontSize: 18.0,
                      ),
                      decoration: InputDecoration(
                        border: OutlineInputBorder(
                          borderRadius: BorderRadius.circular(30),
                        ),
                        hintText: 'Enter your password',
                        labelText: "Password",
                        icon: Padding(
                          padding: EdgeInsets.only(top: 15.0),
                          child: Icon(Icons.lock),
                        ),
                        suffixIcon: GestureDetector(
                          onTap: () {
                            setState(() {
                              _obscureText = !_obscureText;
                            });
                          },
                          child: Icon(
                            _obscureText
                                ? Icons.visibility
                                : Icons.visibility_off,
                            semanticLabel: _obscureText
                                ? 'show password'
                                : 'hide password',
                          ),
                        ),
                      ),
                      onSaved: (password) => _password = password,
                    ),
                  ),
                  Row(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: <Widget>[
                        Padding(
                          padding: EdgeInsets.symmetric(horizontal: 10),
                          child: RaisedButton(
                            color: Color(0xFFD50000),
                            textColor: Color(0xFFFFFFFF),
                            child: Text('Login with Google'),
                            onPressed: (){
                              googleAuth.signIn().then((result){
                                result.authentication.then((googleKey){
                                  FirebaseAuth.instance.signInWithGoogle(
                                    idToken: googleKey.idToken,
                                    accessToken: googleKey.accessToken

                                  ).then((signedInUser){
                                    print('Signed in as ${signedInUser.displayName}');
                                    Navigator.of(context).pushReplacementNamed('/list');
                                  });
                                }).catchError((onError){
                                  print(onError);
                                });
                                }).catchError((onError){
                                  print(onError);

                              });
                            },
                          ),

                        ),
                        Padding(
                          padding: EdgeInsets.symmetric(horizontal: 10),
                          child: RaisedButton(
                            color: Color(0xFF448AFF),
                            textColor: Color(0xFFFFFFFF),
                            child: Text('Login'),
                            onPressed: signIn,
                          ),
                        ),
                  ]),
                      Padding(
                          padding:
                              EdgeInsets.symmetric(horizontal: 10, vertical: 5),
                          child: FlatButton(
                            textColor: Color(0xFF448AFF),
                            child: Text('Forgot Password'),
                            onPressed: () {
                              print('onPressed');
                            },
                          ),
                        ),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      Padding(
                        padding: EdgeInsets.fromLTRB(50, 70, 0, 10),
                        child: Text(
                          'Still do not have an account ',
                          style: TextStyle(color: Color(0xFF9E9E9E)),
                        ),
                      ),
                      Padding(
                        padding: EdgeInsets.fromLTRB(0, 70, 30, 10),
                        child: FlatButton(
                          textColor: Color(0xFF448AFF),
                          child: Text('registration'),
                          onPressed: () {
                            Navigator.of(context).pushNamedAndRemoveUntil(
                                '/registration', (Route<dynamic> route) => false);
                          },
                        ),
                      ),
                    ],
                  ),
                ],
              ),
            ),
          ),
        ]),
      ),
    );
  }

void signIn() async {
    if(_formKey.currentState.validate()){
      _formKey.currentState.save();
      try{
        FirebaseUser user = await FirebaseAuth.instance.signInWithEmailAndPassword(email: _email, password: _password);
        Navigator.push(context, MaterialPageRoute(builder: (context) => HomeScreen(user: user)));
      }catch(e){
        print(e.message);
      }
    }
  }

}

最佳答案

您需要在此处添加您的 SHA 指纹:

enter image description here

您可以在这里找到更多信息:https://developers.google.com/android/guides/client-auth

您可以转到 cmd 并编写类似以下内容来获取计算机的调试 SHA key : “C:\Program Files\Java\jdk1.8.0_181\bin\keytool.exe”-exportcert -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore

关于dart - Flutter:通过 Google Firebase 授权时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54478141/

相关文章:

flutter - 如何使用 customPaint 添加图像作为背景?

ios - 我们如何在 iOS 应用程序中集成 Google dialogflow v2 api?

android - GCP API com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException

dart - 如何在dom-if上设置restamp属性

flutter - 在 2 个选项卡之间切换时,Tabview 未随提供程序更新

flutter - Flutter中的复选框

flutter - 如何在flutter中获取InteractiveViewer当前比例的值?

python - HttpAccessTokenRefreshError : invalid_grant . .. 一小时限制刷新 token

firebase - documentSnapshot.data() 不传递给构建器 : Flutter

dart - 如何在抽象类中声明工厂构造函数?