Flutter Firebase iOS Ошибка входа в Google - PullRequest
0 голосов
/ 19 сентября 2019

выпуск

Я создал приложение на Android, которое хочу протестировать на iOS, но не могу заставить работать Google Firebase.Когда я нажимаю кнопку входа, приложение полностью пропускает вход и даже не запрашивает мой логин в Google.

Ошибки

Когда я запускаю приложение, я получаю следующееошибки:

Exception: MissingPluginException(No implementation found for method Query#addSnapshotListener on channel plugins.flutter.io/cloud_firestore)
flutter: MissingPluginException(No implementation found for method init on channel plugins.flutter.io/google_sign_in)

Пробовал до сих пор

  • обновление флаттера
  • очистка флаттера
  • публикация флаттера get
  • ВыполнениеШаги интеграции с iOS на этой странице https://pub.dev/packages/google_sign_in#-readme-tab- Доктор флаттера
  • Пониженные / обновленные кокоаподы

Код

import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:rxdart/rxdart.dart';

class AuthService {
  // Firebase Variables
  final GoogleSignIn _googleSignIn = GoogleSignIn();
  final FirebaseAuth _auth = FirebaseAuth.instance;
  final Firestore _db = Firestore.instance;

  // RXDart Variables
  Observable<FirebaseUser> user; // firebase user
  Observable<Map<String, dynamic>> profile; // custom user data in Firestore
  PublishSubject loading = PublishSubject();

  AuthService() {
    user = Observable(_auth.onAuthStateChanged);
    profile = user.switchMap((FirebaseUser u) {
      if (u != null) {
        print(_db
            .collection('users')
            .document(u.uid)
            .snapshots()
            .map((snap) => snap.data));
        return null;
      } else {
        return Observable.just({});
      }
    });
  }

  Future<FirebaseUser> googleSignIn() async {
    try {
      loading.add(true);
      GoogleSignInAccount googleSignInAccount = await _googleSignIn.signIn();
      GoogleSignInAuthentication googleAuth =
          await googleSignInAccount.authentication;

      final AuthCredential credential = GoogleAuthProvider.getCredential(
        accessToken: googleAuth.accessToken,
        idToken: googleAuth.idToken,
      );

      final FirebaseUser user =
          (await _auth.signInWithCredential(credential)).user;
      updateUserData(user);

      loading.add(false);
      return null; //user;
    } catch (error) {
   print(error.toString());
      return null;
    }
  }

  void updateUserData(FirebaseUser user) async {
    DocumentReference ref = _db.collection('users').document(user.email);
    CollectionReference refPasswordCollection =
        _db.collection('users').document(user.email).collection('Passwords');
    CollectionReference refCategoriesCollection =
        _db.collection('users').document(user.email).collection('Categories');

    refPasswordCollection.buildArguments();
    refCategoriesCollection.buildArguments();

    userDocSTRING = ref.documentID.toString();
    userPassSTRING = refPasswordCollection.reference().id.toString();
    userCatSTRING = refCategoriesCollection.reference().id.toString();

  Firestore.instance
        .collection('users')
        .document(userDocSTRING.toString())
        .collection(userCatSTRING.toString())
        .document('All')
        .setData({'Name': "All"});
    ref.setData({
      'uid': user.uid,
      'email': user.email,
      'photoURL': user.photoUrl,
      'displayName': user.displayName,
    }, merge: true);
  }

  Future<String> signOut() async {
    try {
      //BuildContext context;
      _auth.signOut(); //.whenComplete(() => Navigator.pop(context, LoginPage));
      return _auth.currentUser().toString();
    } catch (e) {
      return e.toString();
    }
  }
}

var userPassSTRING;
var userDocSTRING;
var userCatSTRING;

final AuthService authService = AuthService();
...