Я пытаюсь реализовать функцию входа в 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
Плагин входа в Google, похоже, не регистрируется, как выглядит так:
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"));
}
Я пытался рассмотреть многие из проблем, подобных этой, и ни одно из решений, которые работали для других, похоже, не работает для меня. Ваша помощь будет принята с благодарностью.