(Не реализована реализация метода init на канале plugins.flutter.io/google_sign_in - PullRequest
1 голос
/ 04 апреля 2020

Я пытаюсь реализовать функцию входа в 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"));
  }

Я пытался рассмотреть многие из проблем, подобных этой, и ни одно из решений, которые работали для других, похоже, не работает для меня. Ваша помощь будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...