(No implementation found for method init on channel plugins.flutter.io/google_sign_in

Viewed 2397

I am trying to implement the Google Sign-in feature for an app that I am currently working on, however, I keep running into this error when the "Sign in" button is clicked:

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: MissingPluginException(No implementation found for method init on channel plugins.flutter.io/google_sign_in)
 E/flutter (15895): #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:154:7)
 E/flutter (15895): <asynchronous suspension>
 E/flutter (15895): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:329:12)
 E/flutter (15895): #2      MethodChannelGoogleSignIn.init (package:google_sign_in_platform_interface/src/method_channel_google_sign_in.dart:28:20)
 E/flutter (15895): #3      GoogleSignIn._ensureInitialized (package:google_sign_in/google_sign_in.dart:246:62)
 E/flutter (15895): #4      GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:228:11)
 E/flutter (15895): #5      GoogleSignIn._addMethodCall (package:google_sign_in/google_sign_in.dart:285:18)
 E/flutter (15895): #6      GoogleSignIn.signIn (package:google_sign_in/google_sign_in.dart:356:9)
 E/flutter (15895): #7      AuthService.handleSignIn (package:background_fetch_example/firebase_auth.dart:55:67)
 E/flutter (15895): #8      AuthService.build.<anonymous closure> (package:background_fetch_example/firebase_auth.dart:45:17)
 E/flutter (15895): #9      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:779:19)
 E/flutter (15895): #10     _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:862:36)
 E/flutter (15895): #11     GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
 E/flutter (15895): #12     TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:504:11)
 E/flutter (15895): #13     BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:282:5)
 E/flutter (15895): #14     BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:217:7)
 E/flutter (15895): #15     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:475:9)
 E/flutter (15895): #16     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:76:12)
 E/flutter (15895): #17     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:122:9)
 E/flutter (15895): #18     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:379:8)
 E/flutter (15895): #19     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:120:18)
 E/flutter (15895): #20     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:106:7)
 E/flutter (15895): #21     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:218:19)
 E/flutter (15895): #22     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
 E/flutter (15895): #23     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
 E/flutter (15895): #24     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
 E/flutter (15895): #25     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
 E/flutter (15895): #26     _rootRunUnary (dart:async/zone.dart:1196:13)
 E/flutter (15895): #27     _CustomZone.runUnary (dart:async/zone.dart:1085:19)
 E/flutter (15895): #28     _CustomZone.runUnaryGuarded (dart:async/zone.dart:987:7)
 E/flutter (15895): #29     _invoke1 (dart:ui/hooks.dart:275:10)
 E/flutter (15895): #30     _dispatchPointerDataPacket (dart:ui/hooks.dart:184:5)
 E/flutter (15895):

Here is all the code defining the GoogleSignInBtn():

import 'package:flutter/cupertino.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:flutter/material.dart';

class GoogleSignInBtn extends StatefulWidget {
  @override
  AuthService createState() => AuthService();
  // bool isActive;
  // GoogleSignInBtn(this.isActive);
  }


class AuthService extends State<GoogleSignInBtn> {
  FirebaseAuth _auth = FirebaseAuth.instance;
  FirebaseUser _user;

  GoogleSignIn _googleSignIn = new GoogleSignIn();

  @override
  Widget build(BuildContext context) {
    return isSignIn
              ? Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                CircleAvatar(
                  backgroundImage: NetworkImage(_user.photoUrl),
                ),
                Text(_user.displayName),
                OutlineButton(
                  onPressed: () {
                    gooleSignout();
                  },
                  child: Text("Logout"),
                )
              ],
            ),
          ) 
               : Center(
            child: OutlineButton(
              onPressed: () {
                handleSignIn();
              },
              child: Text("SignIn with Goolge"),
            ),
          );
  }

  bool isSignIn = false;

  Future<void> handleSignIn() async {
    GoogleSignInAccount googleSignInAccount = await _googleSignIn.signIn();
    GoogleSignInAuthentication googleSignInAuthentication =
    await googleSignInAccount.authentication;

    AuthCredential credential = GoogleAuthProvider.getCredential(
        idToken: googleSignInAuthentication.idToken,
        accessToken: googleSignInAuthentication.accessToken);

    AuthResult result = (await _auth.signInWithCredential(credential));

    _user = result.user;

    setState(() {
      isSignIn = true;
    });
}

  Future<void> gooleSignout() async {
    await _auth.signOut().then((onValue) {
      _googleSignIn.signOut();
      setState(() {
        isSignIn = true;
      });
    });
  }
}

In order to call this widget on my login screen I simply put: GoogleSignInBtn() and imported import: 'package:background_fetch_example/firebase_auth.dart';

However, what I notice isn't updating is the GeneratedPluginRegistrant.java The google sign in plugin doesn't seem to be registering as it looks like this:

public final class GeneratedPluginRegistrant {
  public static void registerWith(@NonNull FlutterEngine flutterEngine) {
    ShimPluginRegistry shimPluginRegistry = new ShimPluginRegistry(flutterEngine);
    flutterEngine.getPlugins().add(new com.transistorsoft.flutter.backgroundfetch.BackgroundFetchPlugin());
      io.flutter.plugins.firebaseauth.FirebaseAuthPlugin.registerWith(shimPluginRegistry.registrarFor("io.flutter.plugins.firebaseauth.FirebaseAuthPlugin"));
    flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.core.FirebaseCorePlugin());
      com.roughike.facebooklogin.facebooklogin.FacebookLoginPlugin.registerWith(shimPluginRegistry.registrarFor("com.roughike.facebooklogin.facebooklogin.FacebookLoginPlugin"));
      com.roughike.fluttertwitterlogin.fluttertwitterlogin.TwitterLoginPlugin.registerWith(shimPluginRegistry.registrarFor("com.roughike.fluttertwitterlogin.fluttertwitterlogin.TwitterLoginPlugin"));
    flutterEngine.getPlugins().add(new io.flutter.plugins.googlesignin.GoogleSignInPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin());
  }

When, instead, it's supposed to look like this:

public final class GeneratedPluginRegistrant {
  public static void registerWith(@NonNull FlutterEngine flutterEngine) {
    ShimPluginRegistry shimPluginRegistry = new ShimPluginRegistry(flutterEngine);
      io.flutter.plugins.firebaseauth.FirebaseAuthPlugin.registerWith(shimPluginRegistry.registrarFor("io.flutter.plugins.firebaseauth.FirebaseAuthPlugin"));
    flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.core.FirebaseCorePlugin());
      com.roughike.facebooklogin.facebooklogin.FacebookLoginPlugin.registerWith(shimPluginRegistry.registrarFor("com.roughike.facebooklogin.facebooklogin.FacebookLoginPlugin"));
      com.roughike.fluttertwitterlogin.fluttertwitterlogin.TwitterLoginPlugin.registerWith(shimPluginRegistry.registrarFor("com.roughike.fluttertwitterlogin.fluttertwitterlogin.TwitterLoginPlugin"));
      io.flutter.plugins.googlesignin.GoogleSignInPlugin.registerWith(shimPluginRegistry.registrarFor("io.flutter.plugins.googlesignin.GoogleSignInPlugin"));
  }

I've tried looking at many of the issues similar to this and none of the solutions that have worked for others seems to work for me. Your help would be greatly appreciated.

1 Answers

Since you're using Firebase Auth, make sure that Google Sign-in is enabled as a Sign-in provider on your Firebase Auth dashboard. After that, running flutter pub clean and flutter pub get should rebuild the project and help with any missing plugins.

Related