From cd8f22959e62c0b7b191e64f4ecfec53cba9f364 Mon Sep 17 00:00:00 2001 From: Iván Ávalos Date: Sat, 20 May 2023 16:43:21 -0600 Subject: Se añade autenticación y onboarding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/firebase/auth.dart | 83 +++++++++++++++++++++++++++++++++++++++++++++++ lib/firebase/storage.dart | 16 +++++++++ 2 files changed, 99 insertions(+) create mode 100644 lib/firebase/auth.dart create mode 100644 lib/firebase/storage.dart (limited to 'lib/firebase') diff --git a/lib/firebase/auth.dart b/lib/firebase/auth.dart new file mode 100644 index 0000000..a876d5b --- /dev/null +++ b/lib/firebase/auth.dart @@ -0,0 +1,83 @@ +import 'dart:io'; + +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:flutter/foundation.dart'; + +import 'storage.dart'; + +class Auth { + final FirebaseAuth _auth = FirebaseAuth.instance; + final GithubAuthProvider _githubProvider = GithubAuthProvider(); + final GoogleAuthProvider _googleAuthProvider = GoogleAuthProvider(); + + User? get currentUser => _auth.currentUser; + + Future createUserWithEmailAndPassword({ + required String email, + required String password, + required String displayName, + required File avatar, + }) async { + try { + UserCredential cred = await _auth.createUserWithEmailAndPassword( + email: email, + password: password, + ); + User? user = cred.user; + if (user != null) { + user.updateDisplayName(displayName); + user.updatePhotoURL(await Storage().uploadAvatar(user.uid, avatar)); + } + return true; + } catch (e) { + if (kDebugMode) print(e); + return false; + } + } + + Future signInWithEmailAndPassword({ + required String email, + required String password, + }) async { + try { + UserCredential cred = await _auth.signInWithEmailAndPassword( + email: email, + password: password, + ); + return cred.user?.emailVerified == true; + } catch (e) { + if (kDebugMode) print(e); + return false; + } + } + + Future signInWithGoogle() async { + try { + await _auth.signInWithProvider(_googleAuthProvider); + return true; + } catch (e) { + if (kDebugMode) print(e); + return false; + } + } + + Future signInWithGithub() async { + try { + await _auth.signInWithProvider(_githubProvider); + return true; + } catch (e) { + if (kDebugMode) print(e); + return false; + } + } + + Future signOut() async { + try { + await _auth.signOut(); + return true; + } catch (e) { + if (kDebugMode) print(e); + return false; + } + } +} diff --git a/lib/firebase/storage.dart b/lib/firebase/storage.dart new file mode 100644 index 0000000..3e0c629 --- /dev/null +++ b/lib/firebase/storage.dart @@ -0,0 +1,16 @@ +import 'dart:io'; + +import 'package:firebase_storage/firebase_storage.dart'; +import 'package:path/path.dart'; + +class Storage { + final FirebaseStorage _storage = FirebaseStorage.instance; + + Future uploadAvatar(String userId, File file) async { + String filename = basename(file.path); + Reference ref = _storage.ref().child(userId).child(filename); + UploadTask task = ref.putFile(file); + await task.whenComplete(() => {}); + return await ref.getDownloadURL(); + } +} -- cgit v1.2.3