summaryrefslogtreecommitdiff
path: root/lib
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 /lib
parente6699735a68763787a74941b3402007738683c03 (diff)
downloadpmsna1-aef50f9e3d66425cbfe6ec6db8ef6a1165c0f882.tar.gz
pmsna1-aef50f9e3d66425cbfe6ec6db8ef6a1165c0f882.tar.bz2
pmsna1-aef50f9e3d66425cbfe6ec6db8ef6a1165c0f882.zip
Implemented GitHub and Google auth
Diffstat (limited to 'lib')
-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
4 files changed, 99 insertions, 12 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,