diff options
Diffstat (limited to 'lib/screens')
-rw-r--r-- | lib/screens/dashboard_screen.dart | 5 | ||||
-rw-r--r-- | lib/screens/login_screen.dart | 67 | ||||
-rw-r--r-- | lib/screens/onboarding_screen.dart | 2 | ||||
-rw-r--r-- | lib/screens/register_screen.dart | 49 |
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)), + ); }); - } - }); + }); + } } } |