![](/img/trans.png)
[英]Flutter based Android app throwing MissingPluginException(No implementation found for method on channel)
[英](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): <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"));
}
我已經嘗試查看許多與此類似的問題,但對其他人有效的解決方案似乎都不適合我。 您的幫助將不勝感激。
由於您使用的是Firebase Auth ,因此請確保在您的Firebase Auth dashboard上啟用 Google 登錄作為登錄提供程序。 之后,運行flutter pub clean
和flutter pub get
應該重建項目並幫助解決任何缺少的插件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.