Firebase 尝试使用google登录,但始终返回null
嘿,伙计们,我正试图在Flitter中使用firebase登录google,但在下一页中它总是返回null 如何在登录谷歌后在下一页中获取当前用户 我已经与firebase连接并生成sha-1和sha-256 这是密码 登录屏幕.dartFirebase 尝试使用google登录,但始终返回null,firebase,flutter,firebase-authentication,Firebase,Flutter,Firebase Authentication,嘿,伙计们,我正试图在Flitter中使用firebase登录google,但在下一页中它总是返回null 如何在登录谷歌后在下一页中获取当前用户 我已经与firebase连接并生成sha-1和sha-256 这是密码 登录屏幕.dart MaterialButton( height: 50, minWidth: double.maxFinite, child: Row( mainAxisAlignment: MainAxisAlignment.center,
MaterialButton(
height: 50,
minWidth: double.maxFinite,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FaIcon(FontAwesomeIcons.google, color: Colors.blue,),
SizedBox(width: 10,),
Text('Sign In With Google', style: TextStyle(color: Colors.blue),),
],
),
elevation: 0,
onPressed: () async {
setState(() {
_isSigningIn = true;
});
try {
final user = await googleSignIn.signIn();
final googleAuth = await user.authentication;
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken
);
final googleAccount = await FirebaseAuth.instance.signInWithCredential(credential);
if(googleAccount != null) {
Navigator.pushReplacementNamed(context, HomeScreen.id);
}
} catch (e) {
final snackbar = SnackBar(content: Text(e.toString()));
_scaffoldKey.currentState.showSnackBar(snackbar);
} finally {
setState(() {
_isSigningIn = false;
});
}
},
),
class HomeScreen extends StatefulWidget {
static const String id = 'HomeScreen';
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final _auth = FirebaseAuth.instance;
User _currentUser;
void getCurrentUser() async {
try {
var currentUser = await _auth.currentUser;
if (currentUser != null) {
_currentUser = currentUser;
}
} catch(e) {
print(e);
}
}
@override
void initState() {
super.initState();
getCurrentUser();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(_currentUser.email),
),
);
}
}
主屏幕省道
MaterialButton(
height: 50,
minWidth: double.maxFinite,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FaIcon(FontAwesomeIcons.google, color: Colors.blue,),
SizedBox(width: 10,),
Text('Sign In With Google', style: TextStyle(color: Colors.blue),),
],
),
elevation: 0,
onPressed: () async {
setState(() {
_isSigningIn = true;
});
try {
final user = await googleSignIn.signIn();
final googleAuth = await user.authentication;
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken
);
final googleAccount = await FirebaseAuth.instance.signInWithCredential(credential);
if(googleAccount != null) {
Navigator.pushReplacementNamed(context, HomeScreen.id);
}
} catch (e) {
final snackbar = SnackBar(content: Text(e.toString()));
_scaffoldKey.currentState.showSnackBar(snackbar);
} finally {
setState(() {
_isSigningIn = false;
});
}
},
),
class HomeScreen extends StatefulWidget {
static const String id = 'HomeScreen';
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final _auth = FirebaseAuth.instance;
User _currentUser;
void getCurrentUser() async {
try {
var currentUser = await _auth.currentUser;
if (currentUser != null) {
_currentUser = currentUser;
}
} catch(e) {
print(e);
}
}
@override
void initState() {
super.initState();
getCurrentUser();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(_currentUser.email),
),
);
}
}
类主屏幕扩展StatefulWidget{
静态常量字符串id='主屏幕';
@凌驾
_HomeScreenState createState()=>\u HomeScreenState();
}
类_homescrenstate扩展状态{
final _auth=FirebaseAuth.instance;
用户\u当前用户;
void getCurrentUser()异步{
试一试{
var currentUser=wait_auth.currentUser;
如果(currentUser!=null){
_currentUser=currentUser;
}
}捕获(e){
印刷品(e);
}
}
@凌驾
void initState(){
super.initState();
getCurrentUser();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(_currentUser.email),
),
);
}
}
谢谢 这一行是一个异步函数,正是因为这个原因,您收到null,您必须添加一个等待
final googleAccount=等待FirebaseAuth.instance.signInWithCredential(凭证)代码>
除此之外,要访问当前用户的信息,您必须这样做
googleAccount.user