diff --git a/packages/firebase_auth/CHANGELOG.md b/packages/firebase_auth/CHANGELOG.md
index 104de5398129..2bcf576459f5 100644
--- a/packages/firebase_auth/CHANGELOG.md
+++ b/packages/firebase_auth/CHANGELOG.md
@@ -9,6 +9,7 @@
 ## 0.6.3
 
 * Add multi app support.
+* Adding support for FirebaseUser.unlink(providerId)
 
 ## 0.6.2+1
 
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 38b3d7df555b..5276275d4b85 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
@@ -121,6 +121,8 @@ public void onMethodCall(MethodCall call, Result result) {
         break;
       case "linkWithTwitterCredential":
         handleLinkWithTwitterCredential(call, result, getAuth(call));
+      case "unlink":
+        handleUnlink(call, result, getAuth(call));
         break;
       case "linkWithGithubCredential":
         handleLinkWithGithubCredential(call, result, getAuth(call));
@@ -461,6 +463,15 @@ private void handleSignInWithCustomToken(
         .addOnCompleteListener(new SignInCompleteListener(result));
   }
 
+  private void handleUnlink(MethodCall call, final Result result, FirebaseAuth firebaseAuth) {
+    Map<String, String> arguments = call.arguments();
+    String providerId = arguments.get("providerId");
+    firebaseAuth
+        .getCurrentUser()
+        .unlink(providerId)
+        .addOnCompleteListener(new SignInCompleteListener(result));
+  }
+
   private void handleSignOut(MethodCall call, final Result result, FirebaseAuth firebaseAuth) {
     firebaseAuth.signOut();
     result.success(null);
diff --git a/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m b/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m
index 0ae2d2307269..2cf9138f49ff 100644
--- a/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m
+++ b/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m
@@ -220,6 +220,14 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result
                                                                   forUser:user
                                                                     error:error];
                                                        }];
+  } else if ([@"unlink" isEqualToString:call.method]) {
+    NSString *providerId = call.arguments[@"providerId"];
+    [[self getAuth:call.arguments].currentUser unlinkFromProvider:providerId
+                                                       completion:^(FIRUser *user, NSError *error) {
+                                                         [self sendResult:result
+                                                                  forUser:user
+                                                                    error:error];
+                                                       }];
   } else if ([@"updateEmail" isEqualToString:call.method]) {
     NSString *email = call.arguments[@"email"];
     [[self getAuth:call.arguments].currentUser updateEmail:email
diff --git a/packages/firebase_auth/lib/firebase_auth.dart b/packages/firebase_auth/lib/firebase_auth.dart
index 9c4353a7dce2..2689b026e56c 100755
--- a/packages/firebase_auth/lib/firebase_auth.dart
+++ b/packages/firebase_auth/lib/firebase_auth.dart
@@ -16,6 +16,7 @@ class FirebaseUserMetadata {
   final Map<dynamic, dynamic> _data;
 
   int get creationTimestamp => _data['creationTimestamp'];
+
   int get lastSignInTimestamp => _data['lastSignInTimestamp'];
 }
 
@@ -490,6 +491,20 @@ class FirebaseAuth {
     return currentUser;
   }
 
+  Future<FirebaseUser> unlink({
+    @required String providerId,
+  }) async {
+    final Map<dynamic, dynamic> data = await channel.invokeMethod(
+      'unlink',
+      <String, String>{
+        'app': app.name,
+        'providerId': providerId,
+      },
+    );
+    final FirebaseUser currentUser = FirebaseUser._(data, app);
+    return currentUser;
+  }
+
   /// Sets the user-facing language code for auth operations that can be
   /// internationalized, such as [sendEmailVerification]. This language
   /// code should follow the conventions defined by the IETF in BCP47.
diff --git a/packages/firebase_auth/test/firebase_auth_test.dart b/packages/firebase_auth/test/firebase_auth_test.dart
index c84edf0431fa..9cfab3c6d1e7 100755
--- a/packages/firebase_auth/test/firebase_auth_test.dart
+++ b/packages/firebase_auth/test/firebase_auth_test.dart
@@ -288,6 +288,25 @@ void main() {
       );
     });
 
+    test('unlink', () async {
+      final FirebaseUser user = await auth.unlink(
+        providerId: kMockProviderId,
+      );
+      verifyUser(user);
+      expect(
+        log,
+        <Matcher>[
+          isMethodCall(
+            'unlink',
+            arguments: <String, String>{
+              'app': auth.app.name,
+              'providerId': kMockProviderId,
+            },
+          ),
+        ],
+      );
+    });
+
     test('signInWithFacebook', () async {
       final FirebaseUser user = await auth.signInWithFacebook(
         accessToken: kMockAccessToken,