Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/blocs/authentication_bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,5 @@ class AuthenticationManager{
Future<User> googleSignIn() async => await _signIn(auth.googleSignIn);
Future<User> facebookSignIn() async => await _signIn(auth.facebookSignIn);
Future<User> mobileSignIn() async => await _signIn(auth.mobileSignIn);
Stream<User> get onAuthChanged => auth.onAuthStateChanged;
}
18 changes: 18 additions & 0 deletions lib/screens/home_screen.dart
Original file line number Diff line number Diff line change
@@ -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}"),
),
);
}
}
11 changes: 10 additions & 1 deletion lib/screens/landing_controller.dart
Original file line number Diff line number Diff line change
@@ -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';
Expand Down Expand Up @@ -27,7 +28,15 @@ class LandingController extends StatelessWidget {
AuthenticationManager bloc,
Widget child,
) {
return AuthenticationScreen.create(context);
return StreamBuilder<User>(
stream: bloc.onAuthChanged ,
builder: (BuildContext context, AsyncSnapshot<User> snapshot){
if(snapshot.hasData){
return HomeScreen(user: snapshot.data,);
}
return AuthenticationScreen.create(context);
},
);
},
),
);
Expand Down
4 changes: 3 additions & 1 deletion lib/services/firebase_authentication_handler.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:firebase_auth/firebase_auth.dart';
import 'package:meta/meta.dart';

abstract class AuthBase{
Expand All @@ -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});
}
14 changes: 7 additions & 7 deletions lib/services/handlers/firebase/firebase_handler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ class FirebaseHandler extends AuthBase{

@override Future<User> 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<User> 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());});
}

Expand All @@ -41,7 +41,7 @@ class FirebaseHandler extends AuthBase{
idToken: _gAuthentication.idToken,
accessToken: _gAuthentication.accessToken
)
).then<User>((AuthResult _fbAuth) => _fbAuth.user != null ? User(uid: _fbAuth.user.uid, avatarUrl: _fbAuth.user.photoUrl, displayName: _fbAuth.user.displayName) : null);
).then<User>((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("");
}
Expand All @@ -61,7 +61,7 @@ class FirebaseHandler extends AuthBase{
FacebookAuthProvider.getCredential(
accessToken: _result.accessToken.token
)
).then<User>((AuthResult _fbAuth) => _fbAuth.user != null ? User(uid: _fbAuth.user.uid, avatarUrl: _fbAuth.user.photoUrl, displayName: _fbAuth.user.displayName) : null);
).then<User>((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");
Expand All @@ -77,7 +77,7 @@ class FirebaseHandler extends AuthBase{
@override Future<User> emailAndPasswordSignIn(String email, String password) async{
try{
return _auth.signInWithEmailAndPassword(email: email, password: password)
.then<User>((AuthResult _fbAuth) => _fbAuth.user != null ? User(uid: _fbAuth.user.uid, avatarUrl: _fbAuth.user.photoUrl, displayName: _fbAuth.user.displayName) : null);
.then<User>((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());
}
Expand All @@ -86,7 +86,7 @@ class FirebaseHandler extends AuthBase{
@override Future<User> createAccount(String email, String password) async{
try{
return _auth.createUserWithEmailAndPassword(email: email, password: password)
.then<User>((AuthResult _fbAuth) => _fbAuth.user != null ? User(uid: _fbAuth.user.uid, avatarUrl: _fbAuth.user.photoUrl, displayName: _fbAuth.user.displayName) : null);
.then<User>((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());
}
Expand Down Expand Up @@ -127,7 +127,7 @@ class FirebaseHandler extends AuthBase{
// });
return user != null ? User(uid: user.uid, avatarUrl: user.photoUrl, displayName: user.displayName) : null;
}
@override Stream<User> get onAuthStateChanged => _auth.onAuthStateChanged.map((_fireUser) => _fireUser != null ? User(uid: _fireUser.uid, avatarUrl: _fireUser.photoUrl, displayName: _fireUser.displayName) : null);
@override Stream<User> get onAuthStateChanged => _auth.onAuthStateChanged.map((_fireUser) => _fireUser != null ? User(uid: _fireUser.uid, avatarUrl: _fireUser.photoUrl, displayName: _fireUser.displayName, fbUser: _fireUser) : null);

Future<void> verifyPhoneNumber({@required String mobileNumber}) async {
final PhoneVerificationCompleted verificationCompleted =
Expand Down