import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_learn/presentation/auth/register_screen.dart'; import 'package:firebase_learn/presentation/main_screen.dart'; import 'package:flutter/material.dart'; import 'package:google_sign_in/google_sign_in.dart'; class LoginScreen extends StatefulWidget { const LoginScreen({Key? key}); @override LoginScreenState createState() => LoginScreenState(); } class LoginScreenState extends State { final _emailController = TextEditingController(); final _passwordController = TextEditingController(); String _errorMessage = ''; Future loginWithGoogle() async { final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn(); final GoogleSignInAuthentication? googleAuth = await googleUser?.authentication; final credential = GoogleAuthProvider.credential( accessToken: googleAuth?.accessToken, idToken: googleAuth?.idToken); return await FirebaseAuth.instance.signInWithCredential(credential); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Sign In'), ), body: Padding( padding: const EdgeInsets.all(16.0), child: SingleChildScrollView( child: Column( children: [ const SizedBox(height: 32.0), TextField( controller: _emailController, decoration: const InputDecoration( labelText: 'Email', border: OutlineInputBorder(), ), ), const SizedBox(height: 16.0), TextField( controller: _passwordController, decoration: const InputDecoration( labelText: 'Password', border: OutlineInputBorder(), ), obscureText: true, ), const SizedBox(height: 16.0), ElevatedButton( onPressed: () async { try { await FirebaseAuth.instance.signInWithEmailAndPassword( email: _emailController.text, password: _passwordController.text, ); Navigator.of(context).pushReplacement( MaterialPageRoute( builder: (context) => const MainScreen()), ); } catch (error) { setState(() { _errorMessage = error.toString(); }); ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(_errorMessage), ), ); } }, child: const Text('Sign In'), ), const SizedBox(height: 16.0), TextButton( onPressed: () async { try { UserCredential userCredential = await loginWithGoogle(); if (userCredential != null) { Navigator.of(context).pushReplacement( MaterialPageRoute( builder: (context) => const MainScreen()), ); } } catch (error) { setState(() { _errorMessage = error.toString(); }); ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(_errorMessage), ), ); } }, child: const Text('Login with Google'), ), const SizedBox(height: 32.0), TextButton( onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => const RegisterScreen()), ); }, child: const Text('Don\'t have an account? Sign up'), ), ], ), ), ), ); } }