how to flutter google login with firbase

https://www.youtube.com/watch?v=1k-gITZA9CI I made my own program by following this YouTube video. I received the user's id token in the console, but the page does not changed. I think there is no place to connect the HomePage class, but where should I call it?

loginpage(google login)->Mainpage

================

<main.dart>
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:???/LoginD/LoginD.dart';
import 'package:???/provider/google_sign_in.dart';
import 'package:provider/provider.dart';

Future main() async{
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) => ChangeNotifierProvider(
      create: (context)=>GoogleSignInProvider(),
      child: MaterialApp(
        debugShowCheckedModeBanner: false,
        title: '???',
        home: LogIn(),
      ),
    );
  }
=====================
<loginD.dart(google login button)>
...
                      

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

===================== <home_page.dart>

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:???/MainD/MainPage.dart';

import '../LoginD/LoginD.dart';

class HomePage extends StatefulWidget {
  const HomePage({Key? key}) : super(key: key);

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: StreamBuilder(
            stream: FirebaseAuth.instance.authStateChanges(),
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.waiting) {
                print('waiting');
                return Center(child: CircularProgressIndicator());
              } else if (snapshot.hasData) {
                print('corrected');
                return MainPage();
              } else if (snapshot.hasError) {
                print('failed1');
                return Center(child: Text('something went wrong!'));
              } else {
                print('failed2');
                return LogIn();
              }
            }));
  }
}
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) {
      print(e.toString());
    }
    notifyListeners();
  }

  Future logout() async {
    await googleSignIn.disconnect();
    FirebaseAuth.instance.signOut();
  }
}


Comments

Popular posts from this blog

Spring Elasticsearch Operations

Network Error and Timeout on Authorize.net JS

Object oriented programming concepts (OOPs)