Firebase Authentication provides backend services, easy-to-use SDKs, and ready-made UI libraries to authenticate users to your app. It supports authentication using passwords, phone numbers, popular federated identity providers like Google, Facebook and Twitter, and more
In this post we are going to learn how to set up and implementing Google Signin using Firebase authentication
Please refer my previous post to Firebase Setup
Let's start
Step 1: Create Flutter application
Step 2: Add dependencies
Add required depencies in pubspec.yaml file
dependencies: |
and run flutter packages get
Step 3: import required packages in to the main file
import 'package:firebase_auth/firebase_auth.dart'; |
Step 4: Design Login Screen
import 'package:flutter/material.dart'; class LoginPage extends StatefulWidget { class _LoginPageState extends State<LoginPage> { Widget _signInButton() { |
Step 5: Authentication
Now, we will need to create an instance of FirebaseAuth & GoogleSignIn
final FirebaseAuth _auth = FirebaseAuth.instance; Future<String> signInWithGoogle() async { final AuthCredential credential = GoogleAuthProvider.getCredential( final AuthResult authResult = await _auth.signInWithCredential(credential); assert(!user.isAnonymous); final FirebaseUser currentUser = await _auth.currentUser(); void signOutGoogle() async{ print("User Sign Out"); |
Now update login button onPressed functionality
onPressed: () { signInWithGoogle().whenComplete(() { |
Step 6: Check User Signin
Wcan check already user Signin or not by below code
void isSignedIn() async { isLoggedIn = await googleSignIn.isSignedIn();
|
call this in initState() method and navigate to respected screen
Step 7: Run Application
Complete code
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'homepage.dart';
class LoginPage extends StatefulWidget {
@override
_LoginPageState createState() => _LoginPageState();
}
class _LoginPageState extends State<LoginPage> {
final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn googleSignIn = GoogleSignIn();
bool isLoggedIn=false;
@override
void initState() {
// TODO: implement initState
super.initState();
isSignedIn();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
color: Colors.white,
child: Center(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
FlutterLogo(size: 150),
SizedBox(height: 50),
_signInButton(),
],
),
),
),
);
}
Widget _signInButton() {
return OutlineButton(
splashColor: Colors.grey,
onPressed: () {
signInWithGoogle().whenComplete(() {
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (context) {
return MyHomePage();
},
),
);
});
},
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(40)),
highlightElevation: 0,
borderSide: BorderSide(color: Colors.grey),
child: Padding(
padding: const EdgeInsets.fromLTRB(0, 10, 0, 10),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Image(image: AssetImage("assets/google_logo.jpg"), height: 35.0,width: 40,),
Padding(
padding: const EdgeInsets.only(left: 10),
child: Text(
'Sign in with Google',
style: TextStyle(
fontSize: 20,
color: Colors.pink,
),
),
)
],
),
),
);
}
Future<String> signInWithGoogle() async {
final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
final GoogleSignInAuthentication googleSignInAuthentication =
await googleSignInAccount.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleSignInAuthentication.accessToken,
idToken: googleSignInAuthentication.idToken,
);
final AuthResult authResult = await _auth.signInWithCredential(credential);
final FirebaseUser user = authResult.user;
assert(!user.isAnonymous);
assert(await user.getIdToken() != null);
final FirebaseUser currentUser = await _auth.currentUser();
assert(user.uid == currentUser.uid);
return 'signInWithGoogle succeeded: $user';
}
void signOutGoogle() async{
await googleSignIn.signOut();
print("User Sign Out");
}
void isSignedIn() async {
isLoggedIn = await googleSignIn.isSignedIn();
if (isLoggedIn) {
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => MyHomePage()),
);
}
}
}
|
Article Contributed By :
|
|
|
|
3064 Views |