Ошибка входа в Google Flutter не обнаруживается - PullRequest
2 голосов
/ 10 июля 2020

Я использую вход в Google и firebase для интеграции аутентификации в свое приложение. Однако я столкнулся с проблемой: когда я отменяю вход (в том смысле, что я закрываю всплывающее окно), я получаю

PlatformException (PlatformException(sign_in_canceled, com.google.GIDSignIn, The user canceled the sign-in flow.))

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

Future loginWithGoogle() async {
    final GoogleSignIn googleSignIn = GoogleSignIn();
    var account;

    try {
      account = await googleSignIn.signIn();
    } on PlatformException catch (e) {
      print('\n\n\n\n\n AN ERROR OCCURED \n\n\n\n\n');
      print(e.message);
    }

    final AuthResult result = await _auth
        .signInWithCredential(GoogleAuthProvider.getCredential(
            idToken: (await account.authentication).idToken, accessToken: (await account.authentication).accessToken));
    setState(() {
      _firestore.collection('Users').document('${result.user.uid}').setData({
        'Profile Picture': result.user.photoUrl,
        'Name': result.user.displayName,
        'Email ID': result.user.email,
        'Phone Number': result.user.phoneNumber,
      });
      isAuthenticating = true;
    });
    if (result.user.phoneNumber == null) {
      Navigator.pushReplacement(
        context,
        MaterialPageRoute(
          builder: (context) => PhoneRegistrationScreen(
            result: result,
          ),
        ),
      );
    }
  }

Он ничего не печатает, когда возникает ошибка. Я также попытался отловить ошибку с помощью обратного вызова catchError ():

account = await googleSignIn.signIn().catchError((error) {
      print('AN ERROR OCCURED');
    });

Опять же, он ничего не печатает, когда возникает ошибка.

Большое спасибо, ребята, и я очень признателен за вашу помощь!

1 Ответ

1 голос
/ 11 июля 2020

Я исправил эту ошибку и обнаружил, что обратный вызов .catchError() не вызывался в режиме отладки (когда вы нажимаете кнопку Run->Start Debugging в VSCode).

Однако, когда вы вводите flutter run -d, метод .catchError() вызывается обратно, поскольку он не находится в режиме отладки.

Чтобы получить код вашего предпочтительного симулятора, вставьте эту строку кода в терминал:

instruments -s devices

Если это не сработает, вы также можете попробовать вставить следующее:

xcrun simctl list

Метод .catchError() будет вызван в отличие от предыдущего, и код внутри, который будет выполнен как и ожидалось!

Кроме того, приложение больше не будет скрещивать sh с PlatformException(), и вместо этого вы получите журнал вроде этого:

[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: NoSuchMethodError: The getter 'uid' was called on null.
Receiver: null

Я столкнулся с эта проблема также связана с входом в Google, в котором .catchError() не вызывался!

В заключение, если у вас есть ошибка с обработкой ошибок в Firebase Authentication, вы должны сначала попытаться запустить через Терминал. Спасибо, надеюсь, это поможет!

...