Add Google Sign in to you Flutter app just in few steps

Preview

Following steps might be helpful to achieve.

1. Setting up your project

Setup your Flutter project

2. Adding pub.dev library

firebase_auth
google_sign_in

3. Implement Google Sign in functionality

4. Creating firebase project

Register your android app, which is generally your application Id in your app-level build. Gradle.
Download the google-services.json. Move the downloaded google-serivces.json file into your Android app module root directory.
  • Add your project-level build.gradle file.
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.3'
}
  • Add to your project app-level build. Gradle file
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.google.firebase:firebase-analytics:17.2.2'}
apply plugin: 'com.google.gms.google-services'
Set up the sign-in method.
Project name and support email.
Go to project settings and then open the general tab.
Add the SHA key.

5. Getting SHA-1 key

To generate SHA key please follow this link https://developers.google.com/android/guides/client-auth

7. Adding google authentication

create an instance of GoogleSignIn.

final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn _googleSignIn = GoogleSignIn();

8. Testing our app functionality

Add this code to your main.dart file and run and test it

import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
void main() {
runApp(const MaterialApp(
home: Home(),
));
}
final GoogleSignIn _googleSignIn = GoogleSignIn(scopes: ['email']);class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
GoogleSignInAccount? _currentUser;
@override
void initState() {
_googleSignIn.onCurrentUserChanged.listen((account) {
setState(() {
_currentUser = account;
});
});
_googleSignIn.signInSilently();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Flutter Google Sign in'),
),
body: Container(
alignment: Alignment.center,
child: _buildWidget(),
),
);
}
Widget _buildWidget() {
GoogleSignInAccount? user = _currentUser;
if (user != null) {
return Padding(
padding: const EdgeInsets.fromLTRB(2, 12, 2, 12),
child: Column(
children: [
ListTile(
leading: GoogleUserCircleAvatar(identity: user),
title: Text(
user.displayName ?? '',
style: TextStyle(fontSize: 22),
),
subtitle: Text(user.email, style: TextStyle(fontSize: 22)),
),
const SizedBox(
height: 20,
),
const Text(
'Signed in successfully',
style: TextStyle(fontSize: 20),
),
const SizedBox(
height: 10,
),
ElevatedButton(onPressed: signOut, child: const Text('Sign out'))
],
),
);
} else {
return Padding(
padding: const EdgeInsets.all(12.0),
child: Column(
children: [
const SizedBox(
height: 20,
),
const Text(
'You are not signed in',
style: TextStyle(fontSize: 30),
),
const SizedBox(
height: 10,
),
ElevatedButton(
onPressed: signIn,
child: const Padding(
padding: EdgeInsets.all(8.0),
child: Text('Sign in', style: TextStyle(fontSize: 30)),
)),
],
),
);
}
}
void signOut() {
_googleSignIn.disconnect();
}
Future<void> signIn() async {
try {
await _googleSignIn.signIn();
} catch (e) {
print('Error signing in $e');
}
}
}

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store