1
+ import 'dart:async' ;
2
+
1
3
import 'package:bank_cards/src/exceptions/exception_messages.dart' ;
2
4
import 'package:bank_cards/src/exceptions/login_exception.dart' ;
3
5
import 'package:bank_cards/src/models/user.dart' ;
@@ -11,6 +13,10 @@ import 'package:google_sign_in/google_sign_in.dart';
11
13
class LoginRepository extends BaseRepository {
12
14
LoginRepository ();
13
15
16
+ StreamController <User > _loginController = StreamController <User >();
17
+
18
+ Stream <User > get currentUser => _loginController.stream;
19
+
14
20
Future <FirebaseUser > loginWithFacebook () async {
15
21
//New version, but this new version has an issue
16
22
// final facebookLoginResult =
@@ -50,7 +56,7 @@ class LoginRepository extends BaseRepository {
50
56
51
57
final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn ();
52
58
final GoogleSignInAuthentication googleSignInAuthentication =
53
- await googleSignInAccount.authentication;
59
+ await googleSignInAccount.authentication;
54
60
55
61
try {
56
62
return await LoginService .signInWithGoogle (googleSignInAuthentication);
@@ -87,17 +93,33 @@ class LoginRepository extends BaseRepository {
87
93
} else {
88
94
print ("User already exist" );
89
95
}
96
+
97
+ this ._loginController.add (user);
98
+ }
99
+
100
+ Future <User > getUser (String uid) async {
101
+ try {
102
+ User current = await LoginService .getUser (uid);
103
+
104
+ this ._loginController.add (current);
105
+
106
+ return current;
107
+ } on Exception catch (ex) {
108
+ print (ex);
109
+ throw new LoginException .withCode (null , ExceptionMessages .error);
110
+ }
90
111
}
91
112
92
113
Future <User > signIn (String email, String password) async {
93
114
try {
94
115
String uid = await LoginService .signIn (email, password);
95
116
96
117
if (uid != null ) {
97
- return await LoginService .getUser (uid);
118
+ return this .getUser (uid);
98
119
}
99
120
} on PlatformException catch (ex) {
100
- if (ex.code == "ERROR_WRONG_PASSWORD" || ex.code == "ERROR_USER_NOT_FOUND" ) {
121
+ if (ex.code == "ERROR_WRONG_PASSWORD" ||
122
+ ex.code == "ERROR_USER_NOT_FOUND" ) {
101
123
throw new LoginException .withCode (
102
124
null , ExceptionMessages .invalidEmailOrPassword);
103
125
} else {
@@ -107,4 +129,14 @@ class LoginRepository extends BaseRepository {
107
129
108
130
throw LoginException .withCode (null , ExceptionMessages .userNotRegistered);
109
131
}
132
+
133
+ Future <void > logout () async {
134
+ await LoginService .signOut ();
135
+ }
136
+
137
+ void dispose () {
138
+ if (this ._loginController != null && ! this ._loginController.isClosed) {
139
+ this ._loginController.close ();
140
+ }
141
+ }
110
142
}
0 commit comments