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
Post a Comment