英文:
(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.
E/flutter (15895): #9 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:779:19)
E/flutter (15895): #10 _InkResponseState.build.
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.
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
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
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 "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:
```@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("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
得分: 0
由于您正在使用Firebase Auth,请确保在您的Firebase Auth仪表板上将Google登录启用为登录提供程序。之后,运行flutter pub clean
和flutter 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.
专注分享java语言的经验与见解,让所有开发者获益!
评论