summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2023-04-24 22:16:41 -0600
committerIván Ávalos <avalos@disroot.org>2023-04-24 22:16:41 -0600
commitaef50f9e3d66425cbfe6ec6db8ef6a1165c0f882 (patch)
tree5ca24e22f0e7d3abdb535c3ff8e315b26d4634f5
parente6699735a68763787a74941b3402007738683c03 (diff)
downloadpmsna1-aef50f9e3d66425cbfe6ec6db8ef6a1165c0f882.tar.gz
pmsna1-aef50f9e3d66425cbfe6ec6db8ef6a1165c0f882.tar.bz2
pmsna1-aef50f9e3d66425cbfe6ec6db8ef6a1165c0f882.zip
Implemented GitHub and Google auth
-rw-r--r--lib/firebase/auth.dart (renamed from lib/firebase/email_auth.dart)36
-rw-r--r--lib/screens/dashboard_screen.dart37
-rw-r--r--lib/screens/login_screen.dart34
-rw-r--r--lib/screens/register_screen.dart4
-rw-r--r--macos/Flutter/GeneratedPluginRegistrant.swift2
-rw-r--r--pubspec.lock40
-rw-r--r--pubspec.yaml1
7 files changed, 134 insertions, 20 deletions
diff --git a/lib/firebase/email_auth.dart b/lib/firebase/auth.dart
index 3b6844c..791e69a 100644
--- a/lib/firebase/email_auth.dart
+++ b/lib/firebase/auth.dart
@@ -1,7 +1,11 @@
import 'package:firebase_auth/firebase_auth.dart';
-class EmailAuth {
+class Auth {
final FirebaseAuth _auth = FirebaseAuth.instance;
+ final GithubAuthProvider _githubProvider = GithubAuthProvider();
+ final GoogleAuthProvider _googleAuthProvider = GoogleAuthProvider();
+
+ User? get currentUser => _auth.currentUser;
Future<bool> createUserWithEmailAndPassword({
required String email,
@@ -34,4 +38,34 @@ class EmailAuth {
return false;
}
}
+
+ Future<bool> signInWithGoogle() async {
+ try {
+ await _auth.signInWithProvider(_googleAuthProvider);
+ return true;
+ } catch (e) {
+ print(e);
+ return false;
+ }
+ }
+
+ Future<bool> signInWithGithub() async {
+ try {
+ await _auth.signInWithProvider(_githubProvider);
+ return true;
+ } catch (e) {
+ print(e);
+ return false;
+ }
+ }
+
+ Future<bool> signOut() async {
+ try {
+ await _auth.signOut();
+ return true;
+ } catch (e) {
+ print(e);
+ return false;
+ }
+ }
}
diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart
index 914749c..2e27aa2 100644
--- a/lib/screens/dashboard_screen.dart
+++ b/lib/screens/dashboard_screen.dart
@@ -1,11 +1,26 @@
import 'package:flutter/material.dart';
+import 'package:pmsna1/firebase/auth.dart';
import 'package:pmsna1/providers/theme_provider.dart';
import 'package:pmsna1/settings/themes.dart';
import 'package:pmsna1/widgets/post_list.dart';
import 'package:provider/provider.dart';
-class DashboardScreen extends StatelessWidget {
+class DashboardScreen extends StatefulWidget {
const DashboardScreen({super.key});
+
+ @override
+ State<DashboardScreen> createState() => _DashboardScreenState();
+}
+
+class _DashboardScreenState extends State<DashboardScreen> {
+ late Auth _auth;
+
+ @override
+ void initState() {
+ super.initState();
+ _auth = Auth();
+ }
+
@override
Widget build(BuildContext context) {
final ThemeProvider themeProvider = context.watch<ThemeProvider>();
@@ -28,8 +43,10 @@ class DashboardScreen extends StatelessWidget {
backgroundImage:
NetworkImage('https://avalos.me/images/pro.jpg'),
),
- accountName: const Text('Iván Ávalos'),
- accountEmail: const Text('avalos@disroot.org'),
+ accountName: Text(_auth.currentUser?.displayName ?? "Lincite"),
+ accountEmail: _auth.currentUser?.email != null
+ ? Text(_auth.currentUser!.email!)
+ : null,
),
ListTile(
leading: const Icon(Icons.home),
@@ -79,6 +96,12 @@ class DashboardScreen extends StatelessWidget {
themeProvider.theme = newSelection.first;
}),
),
+ ),
+ const Divider(),
+ ListTile(
+ title: const Text('Cerrar sesión'),
+ leading: const Icon(Icons.logout),
+ onTap: () => signOut(context),
)
],
),
@@ -92,4 +115,12 @@ class DashboardScreen extends StatelessWidget {
),
);
}
+
+ void signOut(BuildContext context) {
+ _auth.signOut().then((success) {
+ if (success) {
+ Navigator.of(context).popUntil(ModalRoute.withName('/login'));
+ }
+ });
+ }
}
diff --git a/lib/screens/login_screen.dart b/lib/screens/login_screen.dart
index e70e84d..fd4697c 100644
--- a/lib/screens/login_screen.dart
+++ b/lib/screens/login_screen.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:pmsna1/firebase/email_auth.dart';
+import 'package:pmsna1/firebase/auth.dart';
import 'package:pmsna1/widgets/loading_modal_widget.dart';
import 'package:pmsna1/widgets/responsive.dart';
import 'package:social_login_buttons/social_login_buttons.dart';
@@ -15,7 +15,7 @@ class _LoginScreenState extends State<LoginScreen>
with SingleTickerProviderStateMixin {
late AnimationController _controller;
- final EmailAuth emailAuth = EmailAuth();
+ final Auth _auth = Auth();
bool isLoading = false;
@@ -97,7 +97,7 @@ class _LoginScreenState extends State<LoginScreen>
SocialLoginButton(
buttonType: SocialLoginButtonType.google,
text: 'Iniciar sesión con Google',
- onPressed: () {},
+ onPressed: () => onGoogleLoginClicked(context),
),
spacer,
SocialLoginButton(
@@ -109,7 +109,7 @@ class _LoginScreenState extends State<LoginScreen>
SocialLoginButton(
buttonType: SocialLoginButtonType.github,
text: 'Iniciar sesión con GitHub',
- onPressed: () {},
+ onPressed: () => onGithubLoginClicked(context),
),
spacer,
TextButton(
@@ -126,8 +126,8 @@ class _LoginScreenState extends State<LoginScreen>
);
void onLoginClicked(BuildContext context) {
- emailAuth
- .createUserWithEmailAndPassword(
+ _auth
+ .signInWithEmailAndPassword(
email: _emailController.text,
password: _passwordController.text,
)
@@ -140,6 +140,28 @@ class _LoginScreenState extends State<LoginScreen>
});
}
+ void onGoogleLoginClicked(BuildContext context) {
+ _auth.signInWithGoogle().then((success) {
+ setState(() {
+ isLoading = false;
+ });
+ if (success) {
+ Navigator.of(context).pushNamed('/dash');
+ }
+ });
+ }
+
+ void onGithubLoginClicked(BuildContext context) {
+ _auth.signInWithGithub().then((success) {
+ setState(() {
+ isLoading = false;
+ });
+ if (success) {
+ Navigator.of(context).pushNamed('/dash');
+ }
+ });
+ }
+
@override
Widget build(BuildContext context) {
return Scaffold(
diff --git a/lib/screens/register_screen.dart b/lib/screens/register_screen.dart
index aa5c213..16875f2 100644
--- a/lib/screens/register_screen.dart
+++ b/lib/screens/register_screen.dart
@@ -1,7 +1,7 @@
import 'package:email_validator/email_validator.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
-import 'package:pmsna1/firebase/email_auth.dart';
+import 'package:pmsna1/firebase/auth.dart';
import 'package:pmsna1/widgets/avatar_picker.dart';
import 'package:social_login_buttons/social_login_buttons.dart';
@@ -158,7 +158,7 @@ class _RegisterScreenState extends State<RegisterScreen> {
setState(() {
isLoading = false;
if (validateForm()) {
- EmailAuth()
+ Auth()
.createUserWithEmailAndPassword(
email: _emailController.text,
password: _passwordController.text,
diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift
index 54b3ff1..9d1472f 100644
--- a/macos/Flutter/GeneratedPluginRegistrant.swift
+++ b/macos/Flutter/GeneratedPluginRegistrant.swift
@@ -5,6 +5,7 @@
import FlutterMacOS
import Foundation
+import cloud_firestore
import firebase_auth
import firebase_core
import path_provider_foundation
@@ -12,6 +13,7 @@ import shared_preferences_foundation
import sqflite
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
+ FLTFirebaseFirestorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseFirestorePlugin"))
FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin"))
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
diff --git a/pubspec.lock b/pubspec.lock
index 2f6c37c..22d137d 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -5,10 +5,10 @@ packages:
dependency: transitive
description:
name: _flutterfire_internals
- sha256: "330d7fcbb72624f5b6d374af8b059b0ef4ba96ba5b8987f874964a1287eb617d"
+ sha256: "6a0ad72b2bcdb461749e40c01c478212a78db848dfcb2f10f2a461988bc5fb29"
url: "https://pub.dev"
source: hosted
- version: "1.0.18"
+ version: "1.1.1"
archive:
dependency: transitive
description:
@@ -57,6 +57,30 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.1"
+ cloud_firestore:
+ dependency: "direct main"
+ description:
+ name: cloud_firestore
+ sha256: "17b4bac19f367ba1bd84239493a9a4182730221e4780334dd9cd57c4f13eccb7"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.5.2"
+ cloud_firestore_platform_interface:
+ dependency: transitive
+ description:
+ name: cloud_firestore_platform_interface
+ sha256: "76ba7b9dd43ce7f07e75a2349f3eb3e2c61e1bea88fec4798c3377cccf44cd7a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.12.1"
+ cloud_firestore_web:
+ dependency: transitive
+ description:
+ name: cloud_firestore_web
+ sha256: "0c1305722339e0b3fc0ce62bf6233b3f8762cc105a26af02171b849e6a3b3727"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.4.2"
collection:
dependency: transitive
description:
@@ -165,26 +189,26 @@ packages:
dependency: "direct main"
description:
name: firebase_core
- sha256: "75f747cafd7cbd6c00b908e3a7aa59fc31593d46ba8165d9ee8a79e69464a394"
+ sha256: "239e4ac688674a7e7b5476fd16b0d8e2b5a453d464f32091af3ce1df4ebb7316"
url: "https://pub.dev"
source: hosted
- version: "2.8.0"
+ version: "2.10.0"
firebase_core_platform_interface:
dependency: transitive
description:
name: firebase_core_platform_interface
- sha256: "5615b30c36f55b2777d0533771deda7e5730e769e5d3cb7fda79e9bed86cfa55"
+ sha256: "0df0a064ab0cad7f8836291ca6f3272edd7b83ad5b3540478ee46a0849d8022b"
url: "https://pub.dev"
source: hosted
- version: "4.5.3"
+ version: "4.6.0"
firebase_core_web:
dependency: transitive
description:
name: firebase_core_web
- sha256: "0c1cf1f1022d2245ac117443bb95207952ca770281524d2908e323bc063fb8ff"
+ sha256: "347351a8f0518f3343d79a9a0690fa67ad232fc32e2ea270677791949eac792b"
url: "https://pub.dev"
source: hosted
- version: "2.2.2"
+ version: "2.3.0"
flutter:
dependency: "direct main"
description: flutter
diff --git a/pubspec.yaml b/pubspec.yaml
index a189e04..2285eec 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -25,6 +25,7 @@ dependencies:
firebase_auth: ^4.3.0
table_calendar: <=3.0.9
flutter_staggered_grid_view: ^0.6.2
+ cloud_firestore: ^4.5.2
dev_dependencies:
flutter_test: