(在通道 plugins.flutter.io/google_sign_in 上找不到 init 方法的实现

huangapple 未分类评论46阅读模式
英文:

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

问题

我正尝试为我目前正在开发的应用程序实现Google登录功能,但是当单击“登录”按钮时,我一直遇到以下错误:

[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):
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. (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. (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. (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):


这是定义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();
}

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

GoogleSignIn _googleSignIn = new GoogleSignIn();

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

bool isSignIn = false;

Future 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 gooleSignout() async {
await _auth.signOut().then((onValue) {
_googleSignIn.signOut();
setState(() {
isSignIn = true;
});
});
}
}


为了在我的登录屏幕上调用此小部件,我只需添加:
```GoogleSignInBtn()```
并导入
```import 'package:background_fetch_example/firebase_auth.dart';```

然而,我注意到没有更新```GeneratedPluginRegistrant.java```。
谷歌登录插件似乎没有注册,它的样子是这样的:
```@Keep
public final class GeneratedPluginRegistrant {
  public static void registerWith(@NonNull Flutter

<details>
<summary>英文:</summary>

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 &quot;Sign in&quot; 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: &#39;package:background_fetch_example/firebase_auth.dart&#39;;```

However, what I notice isn&#39;t updating is the ```GeneratedPluginRegistrant.java```
The google sign in plugin doesn&#39;t seem to be registering as it looks like this:
```@Keep
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(&quot;io.flutter.plugins.firebaseauth.FirebaseAuthPlugin&quot;));
    flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.core.FirebaseCorePlugin());
      com.roughike.facebooklogin.facebooklogin.FacebookLoginPlugin.registerWith(shimPluginRegistry.registrarFor(&quot;com.roughike.facebooklogin.facebooklogin.FacebookLoginPlugin&quot;));
      com.roughike.fluttertwitterlogin.fluttertwitterlogin.TwitterLoginPlugin.registerWith(shimPluginRegistry.registrarFor(&quot;com.roughike.fluttertwitterlogin.fluttertwitterlogin.TwitterLoginPlugin&quot;));
    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(&quot;io.flutter.plugins.firebaseauth.FirebaseAuthPlugin&quot;));
    flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.core.FirebaseCorePlugin());
      com.roughike.facebooklogin.facebooklogin.FacebookLoginPlugin.registerWith(shimPluginRegistry.registrarFor(&quot;com.roughike.facebooklogin.facebooklogin.FacebookLoginPlugin&quot;));
      com.roughike.fluttertwitterlogin.fluttertwitterlogin.TwitterLoginPlugin.registerWith(shimPluginRegistry.registrarFor(&quot;com.roughike.fluttertwitterlogin.fluttertwitterlogin.TwitterLoginPlugin&quot;));
      io.flutter.plugins.googlesignin.GoogleSignInPlugin.registerWith(shimPluginRegistry.registrarFor(&quot;io.flutter.plugins.googlesignin.GoogleSignInPlugin&quot;));
  }

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

得分: 0

由于您正在使用Firebase Auth,请确保在您的Firebase Auth仪表板上将Google登录启用为登录提供程序。之后,运行flutter pub cleanflutter pub get应该重新构建项目,并帮助解决任何丢失的插件。

英文:

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.

huangapple
  • 本文由 发表于 2020年4月5日 04:32:30
  • 转载请务必保留本文链接:https://java.coder-hub.com/61034395.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定