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();
        },
Share:
102
Nidew
Author by

Nidew

Updated on January 04, 2023

Comments

  • Nidew
    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
      Mozes Ong about 2 years
      please copy and paste the error u are getting. Paste it in the question so its more clear for someone to identify the error
    • Nidew
      Nidew about 2 years
      there's no error displaying. when I click the button it doesn't working
  • Nidew
    Nidew about 2 years
    same not working sir :(