diff --git a/lib/blocs/authentication_bloc.dart b/lib/blocs/authentication_bloc.dart index f0cc5d9..66668c1 100644 --- a/lib/blocs/authentication_bloc.dart +++ b/lib/blocs/authentication_bloc.dart @@ -23,4 +23,5 @@ class AuthenticationManager{ Future googleSignIn() async => await _signIn(auth.googleSignIn); Future facebookSignIn() async => await _signIn(auth.facebookSignIn); Future mobileSignIn() async => await _signIn(auth.mobileSignIn); + Stream get onAuthChanged => auth.onAuthStateChanged; } \ No newline at end of file diff --git a/lib/screens/home_screen.dart b/lib/screens/home_screen.dart new file mode 100644 index 0000000..b61d219 --- /dev/null +++ b/lib/screens/home_screen.dart @@ -0,0 +1,18 @@ +import 'package:flutter/material.dart'; +import 'package:project_boilerplate/services/firebase_authentication_handler.dart'; + +class HomeScreen extends StatelessWidget { + final User user; + + const HomeScreen({Key key, this.user}) : super(key: key); + + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Center( + child: Text("Welcome ${user.displayName}"), + ), + ); + } +} \ No newline at end of file diff --git a/lib/screens/landing_controller.dart b/lib/screens/landing_controller.dart index ed6fbfc..69daab8 100644 --- a/lib/screens/landing_controller.dart +++ b/lib/screens/landing_controller.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:project_boilerplate/blocs/authentication_bloc.dart'; +import 'package:project_boilerplate/screens/home_screen.dart'; import 'package:provider/provider.dart'; import 'package:project_boilerplate/services/firebase_authentication_handler.dart'; import 'authentication_screen.dart'; @@ -27,7 +28,15 @@ class LandingController extends StatelessWidget { AuthenticationManager bloc, Widget child, ) { - return AuthenticationScreen.create(context); + return StreamBuilder( + stream: bloc.onAuthChanged , + builder: (BuildContext context, AsyncSnapshot snapshot){ + if(snapshot.hasData){ + return HomeScreen(user: snapshot.data,); + } + return AuthenticationScreen.create(context); + }, + ); }, ), ); diff --git a/lib/services/firebase_authentication_handler.dart b/lib/services/firebase_authentication_handler.dart index 814d921..2f38cba 100644 --- a/lib/services/firebase_authentication_handler.dart +++ b/lib/services/firebase_authentication_handler.dart @@ -1,3 +1,4 @@ +import 'package:firebase_auth/firebase_auth.dart'; import 'package:meta/meta.dart'; abstract class AuthBase{ @@ -18,5 +19,6 @@ class User{ final String uid; final String displayName; final String avatarUrl; - User({@required this.uid, @required this.avatarUrl, @required this.displayName}); + final FirebaseUser fbUser; + User({@required this.uid, @required this.avatarUrl, @required this.displayName, this.fbUser}); } \ No newline at end of file diff --git a/lib/services/handlers/firebase/firebase_handler.dart b/lib/services/handlers/firebase/firebase_handler.dart index b70c0e9..c0b312a 100644 --- a/lib/services/handlers/firebase/firebase_handler.dart +++ b/lib/services/handlers/firebase/firebase_handler.dart @@ -20,13 +20,13 @@ class FirebaseHandler extends AuthBase{ @override Future currentUser() async{ return _auth.currentUser() - .then((_fireUser) => _fireUser != null ? User(uid: _fireUser.uid, avatarUrl: _fireUser.photoUrl, displayName: _fireUser.displayName) : null) + .then((_fireUser) => _fireUser != null ? User(uid: _fireUser.uid, avatarUrl: _fireUser.photoUrl, displayName: _fireUser.displayName, fbUser: _fireUser) : null) .catchError((e){print(e.toString());}); } @override Future signInAnonymously() async{ return _auth.signInAnonymously() - .then((_fireAuthResult) => User(uid: _fireAuthResult.user.uid, avatarUrl: _fireAuthResult.user.photoUrl, displayName: _fireAuthResult.user.displayName)) + .then((_fireAuthResult) => User(uid: _fireAuthResult.user.uid, avatarUrl: _fireAuthResult.user.photoUrl, displayName: _fireAuthResult.user.displayName, fbUser: _fireAuthResult.user)) .catchError((e){print(e.toString());}); } @@ -41,7 +41,7 @@ class FirebaseHandler extends AuthBase{ idToken: _gAuthentication.idToken, accessToken: _gAuthentication.accessToken ) - ).then((AuthResult _fbAuth) => _fbAuth.user != null ? User(uid: _fbAuth.user.uid, avatarUrl: _fbAuth.user.photoUrl, displayName: _fbAuth.user.displayName) : null); + ).then((AuthResult _fbAuth) => _fbAuth.user != null ? User(uid: _fbAuth.user.uid, avatarUrl: _fbAuth.user.photoUrl, displayName: _fbAuth.user.displayName, fbUser: _fbAuth.user) : null); }else{ throw StateError(""); } @@ -61,7 +61,7 @@ class FirebaseHandler extends AuthBase{ FacebookAuthProvider.getCredential( accessToken: _result.accessToken.token ) - ).then((AuthResult _fbAuth) => _fbAuth.user != null ? User(uid: _fbAuth.user.uid, avatarUrl: _fbAuth.user.photoUrl, displayName: _fbAuth.user.displayName) : null); + ).then((AuthResult _fbAuth) => _fbAuth.user != null ? User(uid: _fbAuth.user.uid, avatarUrl: _fbAuth.user.photoUrl, displayName: _fbAuth.user.displayName, fbUser: _fbAuth.user) : null); break; case FacebookLoginStatus.cancelledByUser: throw StateError("User Cancelled"); @@ -77,7 +77,7 @@ class FirebaseHandler extends AuthBase{ @override Future emailAndPasswordSignIn(String email, String password) async{ try{ return _auth.signInWithEmailAndPassword(email: email, password: password) - .then((AuthResult _fbAuth) => _fbAuth.user != null ? User(uid: _fbAuth.user.uid, avatarUrl: _fbAuth.user.photoUrl, displayName: _fbAuth.user.displayName) : null); + .then((AuthResult _fbAuth) => _fbAuth.user != null ? User(uid: _fbAuth.user.uid, avatarUrl: _fbAuth.user.photoUrl, displayName: _fbAuth.user.displayName, fbUser: _fbAuth.user) : null); }catch (e){ throw Exception(e.toString()); } @@ -86,7 +86,7 @@ class FirebaseHandler extends AuthBase{ @override Future createAccount(String email, String password) async{ try{ return _auth.createUserWithEmailAndPassword(email: email, password: password) - .then((AuthResult _fbAuth) => _fbAuth.user != null ? User(uid: _fbAuth.user.uid, avatarUrl: _fbAuth.user.photoUrl, displayName: _fbAuth.user.displayName) : null); + .then((AuthResult _fbAuth) => _fbAuth.user != null ? User(uid: _fbAuth.user.uid, avatarUrl: _fbAuth.user.photoUrl, displayName: _fbAuth.user.displayName, fbUser: _fbAuth.user) : null); }catch (e){ throw Exception(e.toString()); } @@ -127,7 +127,7 @@ class FirebaseHandler extends AuthBase{ // }); return user != null ? User(uid: user.uid, avatarUrl: user.photoUrl, displayName: user.displayName) : null; } - @override Stream get onAuthStateChanged => _auth.onAuthStateChanged.map((_fireUser) => _fireUser != null ? User(uid: _fireUser.uid, avatarUrl: _fireUser.photoUrl, displayName: _fireUser.displayName) : null); + @override Stream get onAuthStateChanged => _auth.onAuthStateChanged.map((_fireUser) => _fireUser != null ? User(uid: _fireUser.uid, avatarUrl: _fireUser.photoUrl, displayName: _fireUser.displayName, fbUser: _fireUser) : null); Future verifyPhoneNumber({@required String mobileNumber}) async { final PhoneVerificationCompleted verificationCompleted =