aboutsummaryrefslogtreecommitdiff
path: root/lib/screens
diff options
context:
space:
mode:
Diffstat (limited to 'lib/screens')
-rw-r--r--lib/screens/dashboard_screen.dart5
-rw-r--r--lib/screens/login_screen.dart67
-rw-r--r--lib/screens/onboarding_screen.dart2
-rw-r--r--lib/screens/register_screen.dart49
4 files changed, 93 insertions, 30 deletions
diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart
index be3aca0..72bbab7 100644
--- a/lib/screens/dashboard_screen.dart
+++ b/lib/screens/dashboard_screen.dart
@@ -109,11 +109,6 @@ class _DashboardScreenState extends State<DashboardScreen> {
}
void signOut(BuildContext context) {
- /*_auth.signOut().then((success) {
- if (success) {
- Navigator.of(context).popUntil(ModalRoute.withName('/login'));
- }
- });*/
_auth.signOut().then((success) {
if (success) {
Navigator.of(context).pushReplacementNamed('/login');
diff --git a/lib/screens/login_screen.dart b/lib/screens/login_screen.dart
index f00328b..c98a565 100644
--- a/lib/screens/login_screen.dart
+++ b/lib/screens/login_screen.dart
@@ -1,4 +1,6 @@
+import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
+import 'package:linkchat/settings/preferences.dart';
import 'package:social_login_buttons/social_login_buttons.dart';
import '../firebase/auth.dart';
@@ -19,6 +21,7 @@ class _LoginScreenState extends State<LoginScreen>
final Auth _auth = Auth();
bool isLoading = false;
+ bool isInit = false;
final padding = 16.0;
final spacer = const SizedBox(height: 16.0);
@@ -107,42 +110,84 @@ class _LoginScreenState extends State<LoginScreen>
);
void onLoginClicked(BuildContext context) {
+ setState(() {
+ isLoading = true;
+ });
_auth
.signInWithEmailAndPassword(
email: _emailController.text,
password: _passwordController.text,
)
- .then((success) {
+ .then((result) {
setState(() {
isLoading = false;
});
- // TODO: checar si el resultado es true
- Navigator.of(context).pushReplacementNamed('/dash');
+ result.fold(
+ (user) {
+ if (user != null && user.emailVerified == false) {
+ ScaffoldMessenger.of(context).showSnackBar(
+ const SnackBar(content: Text('El correo no está verificado')),
+ );
+ } else {
+ Preferences.getShowOnboarding().then((show) {
+ Navigator.of(context)
+ .pushReplacementNamed(show ? '/onboard' : '/dash');
+ });
+ }
+ },
+ (error) => handleError(error),
+ );
});
}
void onGoogleLoginClicked(BuildContext context) {
- _auth.signInWithGoogle().then((success) {
+ setState(() {
+ isLoading = true;
+ });
+ _auth.signInWithGoogle().then((result) {
setState(() {
isLoading = false;
});
- if (success) {
- Navigator.of(context).pushReplacementNamed('/dash');
- }
+ result.fold(
+ (user) {},
+ (error) => handleError(error),
+ );
});
}
void onGithubLoginClicked(BuildContext context) {
- _auth.signInWithGithub().then((success) {
+ setState(() {
+ isLoading = true;
+ });
+ _auth.signInWithGithub().then((result) {
setState(() {
isLoading = false;
});
- if (success) {
- Navigator.of(context).pushReplacementNamed('/dash');
- }
+ result.fold(
+ (user) {},
+ (error) => handleError(error),
+ );
});
}
+ void handleError(FirebaseException error) {
+ String message;
+ switch (error.code) {
+ case 'invalid-email':
+ message = 'El correo electrónico es inválido';
+ case 'user-disabled':
+ message = 'El usuario está desactivado';
+ case 'user-not-found':
+ message = 'El usuario no existe';
+ case 'wrong-password':
+ message = 'La contraseña es incorrecta.';
+ default:
+ message = 'Ocurrió un error desconocido';
+ }
+ ScaffoldMessenger.of(context)
+ .showSnackBar(SnackBar(content: Text(message)));
+ }
+
@override
Widget build(BuildContext context) {
return Scaffold(
diff --git a/lib/screens/onboarding_screen.dart b/lib/screens/onboarding_screen.dart
index e1755c4..5d1ff7a 100644
--- a/lib/screens/onboarding_screen.dart
+++ b/lib/screens/onboarding_screen.dart
@@ -1,5 +1,6 @@
import 'package:concentric_transition/concentric_transition.dart';
import 'package:flutter/material.dart';
+import 'package:linkchat/settings/preferences.dart';
import 'package:lottie/lottie.dart';
import '../widgets/responsive.dart';
@@ -95,6 +96,7 @@ class OnboardingScreen extends StatelessWidget {
);
},
onFinish: () {
+ Preferences.setShowOnboarding(false);
Navigator.of(context).pushNamed('/dash');
},
),
diff --git a/lib/screens/register_screen.dart b/lib/screens/register_screen.dart
index 9a11923..0ba0cf9 100644
--- a/lib/screens/register_screen.dart
+++ b/lib/screens/register_screen.dart
@@ -158,21 +158,42 @@ class _RegisterScreenState extends State<RegisterScreen> {
void onRegisterClicked(BuildContext context) {
setState(() {
- isLoading = false;
- if (validateForm()) {
- Auth()
- .createUserWithEmailAndPassword(
- email: _emailController.text,
- password: _passwordController.text,
- displayName: _nameController.text,
- avatar: File(_avatar!.path),
- )
- .then((success) {
- if (success) {
- Navigator.of(context).pushReplacementNamed('/onboard');
+ isLoading = true;
+ });
+
+ if (validateForm()) {
+ Auth()
+ .createUserWithEmailAndPassword(
+ email: _emailController.text,
+ password: _passwordController.text,
+ displayName: _nameController.text,
+ avatar: File(_avatar!.path),
+ )
+ .then((result) {
+ setState(() {
+ isLoading = false;
+ });
+ result.fold((user) {
+ Navigator.of(context).pushReplacementNamed('/login');
+ }, (error) {
+ String message;
+ switch (error.code) {
+ case 'email-already-in-use':
+ message = 'El correo electrónico ya se encuentra en uso';
+ case 'invalid-email':
+ message = 'El correo electrónico es inválido';
+ case 'operation-not-allowed':
+ message = 'La operación no está permitida';
+ case 'weak-password':
+ message = 'La contraseña es muy débil';
+ default:
+ message = 'Ocurrió un error desconocido';
}
+ ScaffoldMessenger.of(context).showSnackBar(
+ SnackBar(content: Text(message)),
+ );
});
- }
- });
+ });
+ }
}
}