我正在尝试为当前正在使用的应用实现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): <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):
这里是定义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;
});
});
}
}
为了在我的登录屏幕上调用此小部件,我简单地输入:
GoogleSignInBtn()
并进口
import: 'package:background_fetch_example/firebase_auth.dart';
但是,我注意到没有更新的是GeneratedPluginRegistrant.java
谷歌登录插件似乎没有注册,因为它看起来像这样:
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());
}
相反,应该看起来像这样:
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"));
}
我尝试查看许多与此类似的问题,但对其他人无效的解决方案似乎都对我无效。您的帮助将不胜感激。