diff --git a/lib/main.dart b/lib/main.dart index 6aa8b7c..b9cabb0 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,9 +1,11 @@ import 'package:flutter/material.dart'; +import 'package:prosappco/src/provider/google_sign.dart'; import 'package:prosappco/src/screens/login.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:provider/provider.dart'; -// import 'package:firebase_auth/firebase_auth.dart'; - -void main() { +void main() async { + WidgetsFlutterBinding.ensureInitialized(); runApp(const MyApp()); } @@ -11,11 +13,11 @@ class MyApp extends StatelessWidget { const MyApp({super.key}); @override - Widget build(BuildContext context) { - return const MaterialApp( - debugShowCheckedModeBanner: false, - title: 'ProsApp', - home: LoginScreen(), - ); - } + Widget build(BuildContext context) => ChangeNotifierProvider( + create: (context) => GoogleSignProvider(), + child: MaterialApp( + debugShowCheckedModeBanner: false, + title: 'ProsApp', + home: LoginScreen(), + )); } diff --git a/lib/src/provider/google_sign.dart b/lib/src/provider/google_sign.dart new file mode 100644 index 0000000..43e7cf3 --- /dev/null +++ b/lib/src/provider/google_sign.dart @@ -0,0 +1,28 @@ +import 'package:flutter/material.dart'; + +import 'package:flutter/material.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:google_sign_in/google_sign_in.dart'; + +class GoogleSignProvider extends ChangeNotifier { + final googleSign = GoogleSignIn(); + + GoogleSignInAccount? _user; + + GoogleSignInAccount get user => _user!; + + Future googleLogin() async { + final googleUser = await googleSign.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(); + } +} diff --git a/lib/src/screens/login.dart b/lib/src/screens/login.dart index 377857c..19071c1 100644 --- a/lib/src/screens/login.dart +++ b/lib/src/screens/login.dart @@ -1,4 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:prosappco/src/provider/google_sign.dart'; +import 'package:provider/provider.dart'; class LoginScreen extends StatefulWidget { const LoginScreen({super.key}); @@ -63,6 +66,27 @@ class _LoginScreenState extends State { ), ), const Text('Un código sera enviado a este numero de celular'), + ElevatedButton( + onPressed: () { + final provider = + Provider.of(context, listen: false); + provider.googleLogin(); + }, + style: ElevatedButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular( + 15), // Establece el radio de los bordes + ), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + FaIcon(FontAwesomeIcons.google), // Icono del botón + SizedBox(width: 5), // Espacio entre el icono y el texto + Text('Entrar con Google'), // Texto del botón + ], + ), + ), Padding( padding: const EdgeInsets.symmetric(horizontal: 80.0), child: Container( diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index cccf817..7b9be20 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,6 +5,10 @@ import FlutterMacOS import Foundation +import firebase_auth +import firebase_core func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin")) + FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) } diff --git a/pubspec.lock b/pubspec.lock index b18b3f7..a341140 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,6 +1,14 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "330d7fcbb72624f5b6d374af8b059b0ef4ba96ba5b8987f874964a1287eb617d" + url: "https://pub.dev" + source: hosted + version: "1.0.18" async: dependency: transitive description: @@ -57,6 +65,54 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" + firebase_auth: + dependency: "direct main" + description: + name: firebase_auth + sha256: "94c229e296a5b9ee5c8cda918e0b320e3a0cc4f6a349cd410c427da347f2a244" + url: "https://pub.dev" + source: hosted + version: "4.3.0" + firebase_auth_platform_interface: + dependency: transitive + description: + name: firebase_auth_platform_interface + sha256: "1217d8aa313b49d58b489aa8879544563abc8793d9612ff20d8df193f202aedc" + url: "https://pub.dev" + source: hosted + version: "6.12.0" + firebase_auth_web: + dependency: transitive + description: + name: firebase_auth_web + sha256: bf7f1a87995a58b0f07dc617806dabd7ff25c64be7fa47b41ab1bb9a485b0062 + url: "https://pub.dev" + source: hosted + version: "5.2.10" + firebase_core: + dependency: transitive + description: + name: firebase_core + sha256: "75f747cafd7cbd6c00b908e3a7aa59fc31593d46ba8165d9ee8a79e69464a394" + url: "https://pub.dev" + source: hosted + version: "2.8.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: "5615b30c36f55b2777d0533771deda7e5730e769e5d3cb7fda79e9bed86cfa55" + url: "https://pub.dev" + source: hosted + version: "4.5.3" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "0c1cf1f1022d2245ac117443bb95207952ca770281524d2908e323bc063fb8ff" + url: "https://pub.dev" + source: hosted + version: "2.2.2" flutter: dependency: "direct main" description: flutter @@ -75,6 +131,91 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + font_awesome_flutter: + dependency: "direct main" + description: + name: font_awesome_flutter + sha256: "959ef4add147753f990b4a7c6cccb746d5792dbdc81b1cde99e62e7edb31b206" + url: "https://pub.dev" + source: hosted + version: "10.4.0" + google_identity_services_web: + dependency: transitive + description: + name: google_identity_services_web + sha256: "5d9af2f1fa192f2629a266d038ee9307b0abe729a4f1b454dd21b414f5e7d381" + url: "https://pub.dev" + source: hosted + version: "0.2.0" + google_sign_in: + dependency: "direct main" + description: + name: google_sign_in + sha256: "750d08ffb4cd469f13068d15844ffd1d60c7ac1ca3c815918ba4ce4af22a2ddb" + url: "https://pub.dev" + source: hosted + version: "6.0.2" + google_sign_in_android: + dependency: transitive + description: + name: google_sign_in_android + sha256: "6a740e8498920ecf5fc2849ae0e4412536d700230bc3169493a1d031fdfe1cca" + url: "https://pub.dev" + source: hosted + version: "6.1.8" + google_sign_in_ios: + dependency: transitive + description: + name: google_sign_in_ios + sha256: "2e1df687b17f7fddcaf9a0c7f994d0d19b5d41e8ce1d943013befd0a0ae67403" + url: "https://pub.dev" + source: hosted + version: "5.6.1" + google_sign_in_platform_interface: + dependency: transitive + description: + name: google_sign_in_platform_interface + sha256: fece762f0d2dd762ebde43ad70662a209ff6ee034111976549c392f7763d9264 + url: "https://pub.dev" + source: hosted + version: "2.3.1" + google_sign_in_web: + dependency: transitive + description: + name: google_sign_in_web + sha256: "9f883b9b525297663510dfbbe8b04d39715aa0abba430851f501b7d1e4b0f465" + url: "https://pub.dev" + source: hosted + version: "0.11.0+2" + http: + dependency: transitive + description: + name: http + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + url: "https://pub.dev" + source: hosted + version: "0.13.5" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + intl: + dependency: transitive + description: + name: intl + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + url: "https://pub.dev" + source: hosted + version: "0.17.0" js: dependency: transitive description: @@ -115,6 +256,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.0" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" path: dependency: transitive description: @@ -123,6 +272,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.2" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + provider: + dependency: "direct main" + description: + name: provider + sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f + url: "https://pub.dev" + source: hosted + version: "6.0.5" + quiver: + dependency: transitive + description: + name: quiver + sha256: b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47 + url: "https://pub.dev" + source: hosted + version: "3.2.1" sky_engine: dependency: transitive description: flutter @@ -176,6 +349,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.16" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" + source: hosted + version: "1.3.1" vector_math: dependency: transitive description: @@ -186,3 +367,4 @@ packages: version: "2.1.4" sdks: dart: ">=2.19.3 <3.0.0" + flutter: ">=3.3.0" diff --git a/pubspec.yaml b/pubspec.yaml index 00fef9e..83c1bca 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -36,6 +36,12 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 + # Google Sign In + firebase_auth: ^4.3.0 + google_sign_in: ^6.0.2 + provider: ^6.0.5 + font_awesome_flutter: ^10.4.0 + dev_dependencies: flutter_test: sdk: flutter