diff --git a/AUTHORS b/AUTHORS index bf61105271cf..743a88e926f9 100644 --- a/AUTHORS +++ b/AUTHORS @@ -14,5 +14,7 @@ Hayden Flinner Stefano Rodriguez Salvatore Giordano Brian Armstrong -Fabricio Nogueira +Fabricio Nogueira Simon Lightfoot +Ashton Thomas +Thomas Danner diff --git a/packages/firebase_auth/CHANGELOG.md b/packages/firebase_auth/CHANGELOG.md index fe9c4e70e40f..f048af748c73 100644 --- a/packages/firebase_auth/CHANGELOG.md +++ b/packages/firebase_auth/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.5.18 + +* Adding support for updateEmail in FirebaseAuth. + ## 0.5.17 * Adding support for FirebaseUser.delete. diff --git a/packages/firebase_auth/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java b/packages/firebase_auth/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java index 9e5c96fbf3e6..d75e8be0dd19 100755 --- a/packages/firebase_auth/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java +++ b/packages/firebase_auth/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java @@ -114,6 +114,9 @@ public void onMethodCall(MethodCall call, Result result) { case "updateProfile": handleUpdateProfile(call, result); break; + case "updateEmail": + handleUpdateEmail(call, result); + break; case "startListeningAuthState": handleStartListeningAuthState(call, result); break; @@ -450,6 +453,28 @@ public void onComplete(@NonNull Task task) { }); } + private void handleUpdateEmail(MethodCall call, final Result result) { + @SuppressWarnings("unchecked") + Map arguments = (Map) call.arguments; + String email = arguments.get("email"); + + firebaseAuth + .getCurrentUser() + .updateEmail(email) + .addOnCompleteListener( + new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (!task.isSuccessful()) { + Exception e = task.getException(); + result.error(ERROR_REASON_EXCEPTION, e.getMessage(), null); + } else { + result.success(null); + } + } + }); + } + private void handleStartListeningAuthState(MethodCall call, final Result result) { final int handle = nextHandle++; FirebaseAuth.AuthStateListener listener = diff --git a/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m b/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m index 6d7ab37efc22..548e8ace0caa 100644 --- a/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m +++ b/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m @@ -187,6 +187,12 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result [changeRequest commitChangesWithCompletion:^(NSError *error) { [self sendResult:result forUser:nil error:error]; }]; + } else if ([@"updateEmail" isEqualToString:call.method]) { + NSString *toEmail = call.arguments[@"email"]; + [[FIRAuth auth].currentUser updateEmail:toEmail + completion:^(NSError *_Nullable error) { + [self sendResult:result forUser:nil error:error]; + }]; } else if ([@"signInWithCustomToken" isEqualToString:call.method]) { NSString *token = call.arguments[@"token"]; [[FIRAuth auth] signInWithCustomToken:token diff --git a/packages/firebase_auth/lib/firebase_auth.dart b/packages/firebase_auth/lib/firebase_auth.dart index 3ce33be5c164..9e0a505f23db 100755 --- a/packages/firebase_auth/lib/firebase_auth.dart +++ b/packages/firebase_auth/lib/firebase_auth.dart @@ -369,6 +369,18 @@ class FirebaseAuth { return currentUser; } + Future updateEmail({ + @required String email, + }) async { + assert(email != null); + return await channel.invokeMethod( + 'updateEmail', + { + 'email': email, + }, + ); + } + Future updateProfile(UserUpdateInfo userUpdateInfo) async { assert(userUpdateInfo != null); return await channel.invokeMethod( diff --git a/packages/firebase_auth/pubspec.yaml b/packages/firebase_auth/pubspec.yaml index 154aa2af217f..f7adf0ea05a5 100755 --- a/packages/firebase_auth/pubspec.yaml +++ b/packages/firebase_auth/pubspec.yaml @@ -4,7 +4,7 @@ description: Flutter plugin for Firebase Auth, enabling Android and iOS like Google, Facebook and Twitter. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/firebase_auth -version: 0.5.17 +version: 0.5.18 flutter: plugin: diff --git a/packages/firebase_auth/test/firebase_auth_test.dart b/packages/firebase_auth/test/firebase_auth_test.dart index cbfbff521999..000dec4ef76a 100755 --- a/packages/firebase_auth/test/firebase_auth_test.dart +++ b/packages/firebase_auth/test/firebase_auth_test.dart @@ -44,6 +44,9 @@ void main() { case "updateProfile": return null; break; + case "updateEmail": + return null; + break; case "fetchProvidersForEmail": return new List(0); break; @@ -373,6 +376,20 @@ void main() { ]); }); + test('updateEmail', () async { + final String updatedEmail = 'atestemail@gmail.com'; + auth.updateEmail(email: updatedEmail); + expect( + log, + [ + isMethodCall( + 'updateEmail', + arguments: {'email': updatedEmail}, + ), + ], + ); + }); + test('signInWithCustomToken', () async { final FirebaseUser user = await auth.signInWithCustomToken(token: kMockCustomToken);