google sign in button isn't working how to resolve
102
Solution 1
googleSignIn.dart
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
class GoogleSignInProvider extends ChangeNotifier {
final googleSignIn = GoogleSignIn();
GoogleSignInAccount? _user;
GoogleSignInAccount get user => _user!;
Future googleLogin() async {
try {
final googleUser = await googleSignIn.signIn();
if (googleUser == null) return;
_user = googleUser;
final googleAuth = await googleUser.authentication;
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
await FirebaseAuth.instance.signInWithCredential(credential);
} catch (e) {}
notifyListeners();
}
Future logout() async {
await googleSignIn.disconnect();
FirebaseAuth.instance.signOut();
}
}
**SignInButton**
import 'package:flutter/material.dart';
class ButtonWidget extends StatelessWidget {
final String text;
final VoidCallback onClicked;
const ButtonWidget({
Key? key,
required this.text,
required this.onClicked,
}) : super(key: key);
@override
Widget build(BuildContext context) => ElevatedButton(
style: ElevatedButton.styleFrom(
shape: const StadiumBorder(),
onPrimary: Colors.white,
padding: EdgeInsets.symmetric(horizontal: 32, vertical: 12),
),
child: Text(text),
onPressed: onClicked,
);
}
Widget buildUpgradeButton() => ButtonWidget(
text: Click to SignIn,
onClicked: () {
final provider =
Provider.of<GoogleSignInProvider>(context, listen: false);
provider.googleLogin();
});
Solution 2
Try this, maybe u forgot to async await
onPressed: () async {
final provider =
Provider.of<GoogleSignInProvider>(context, listen: false);
await provider.googleLogin();
},
Author by
Nidew
Updated on January 04, 2023Comments
-
Nidew over 1 year
I have added google sign in button to my login page. but when I CLICK IT its not working at all. I REFER this video for the implementation. how to resolve this. I'm struggling to find the error. appreciate your help on this. all the firebase parts are done according to the video instructions. there's no error to displaying. just button not working.
//google_sign_in.dart
import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:google_sign_in/google_sign_in.dart'; class GoogleSignInProvider extends ChangeNotifier{ final googleSignIn =GoogleSignIn(); GoogleSignInAccount? _user; GoogleSignInAccount get user => _user!; Future googleLogin()async{ final googleUser= await googleSignIn.signIn(); if (googleUser == null) return; _user = googleUser; final googleAuth =await googleUser.authentication; final credential = GoogleAuthProvider.credential( accessToken: googleAuth.accessToken, idToken: googleAuth.idToken, ); await FirebaseAuth.instance.signInWithCredential(credential); notifyListeners(); //to update UI } }
//main.dart
import 'dart:io'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'package:lala_live/provider/google_sign_in.dart'; import 'package:lala_live/screens/login.dart'; import 'package:lala_live/screens/splashscreen.dart'; import 'package:google_sign_in/google_sign_in.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:provider/provider.dart'; const bool USE_EMULATOR = false; Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); if (USE_EMULATOR) { _connectToFirebaseEmulator(); } runApp(MyApp()); } Future _connectToFirebaseEmulator() async { final fireStorePort = "8080"; final authPort = 9099; final localhost = Platform.isAndroid ? '10.0.2.2' : 'localhost'; FirebaseFirestore.instance.settings = Settings( host: "$localhost:$fireStorePort", sslEnabled: false, persistenceEnabled: false, ); await FirebaseAuth.instance.useAuthEmulator('http://$localhost:', authPort); } class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); // This widget is the root of your application. @override Widget build(BuildContext context) => ChangeNotifierProvider( create: (context)=> GoogleSignInProvider(), child: MaterialApp( debugShowCheckedModeBanner: false, theme: ThemeData(fontFamily: 'Quicksand'), home: FutureBuilder( future: Future.delayed(Duration(seconds: 3)), builder: (ctx, timer) => timer.connectionState == ConnectionState.done ? Login() //Screen to navigate to once the splashScreen is done. : SplashScreen()), ), ); }
//login.dart
Center( child: SocialButton( logo: 'asset/images/googleicon.png', height: widgetheight, width: width / 4, text: 'Google', onPressed: () { final provider = Provider.of<GoogleSignInProvider>(context,listen:false); provider.googleLogin(); }, color: containergrey)), ], ),
-
Mozes Ong about 2 yearsplease copy and paste the error u are getting. Paste it in the question so its more clear for someone to identify the error
-
Nidew about 2 yearsthere's no error displaying. when I click the button it doesn't working
-
-
Nidew about 2 yearssame not working sir :(