google登录按钮不起作用如何解决

google sign in button isn't working how to resolve

我已将 google 登录按钮添加到我的登录页面。但是当我点击它时它根本不起作用。我参考 this video 来实现。如何解决这个问题。我正在努力寻找错误。感谢您对此的帮助。所有的 firebase 部分都是根据视频说明完成的。 显示没有错误。只是按钮不起作用。

//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)),
                          ],
                        ),

试试这个, 也许你忘了异步等待

onPressed: () async {
          final provider =
              Provider.of<GoogleSignInProvider>(context, listen: false);
          await provider.googleLogin();
        },

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();
        });