Я создаю модуль аутентификации пользователя для своего приложения, и у меня возникают проблемы с асинхронным кодом.
Во-первых, здесь выдается ошибка:
E / flutter (17162): [ОШИБКА: флаттер / shell / common / shell.cc (188)] Ошибка дротика: необработанное исключение:
E / flutter (17162): 'dart: async / future_impl.dart': ошибочное утверждение: строка 146: 'optimized out': неверно.
E / flutter (17162): # 0 _AssertionError._doThrowNew (dart: core / runtime / liberrors_patch.dart: 40: 39)
E / flutter (17162): # 1 _AssertionError._throwNew (dart: core / runtime / liberrors_patch.dart: 36: 5)
E / flutter (17162): # 2 _FutureListener.handleError (dart: async / future_impl.dart: 146: 14)
E / flutter (17162): # 3 Future._propagateToListeners.handleError (dart: async / future_impl.dart: 654: 47)
E / flutter (17162): # 4 Future._propagateToListeners (dart: async / future_impl.dart: 675: 24)
E / flutter (17162): # 5 Future._completeError (dart: async / future_impl.dart: 494: 5)
E / flutter (17162): # 6 _SyncCompleter._completeError (dart: async / future_impl.dart: 55: 12)
E / flutter (17162): # 7 _Completer.completeError (dart: async / future_impl.dart: 27: 5)
E / flutter (17162): # 8 _AsyncAwaitCompleter.completeError (dart: async / runtime / libasync_patch.dart: 40: 18)
E / flutter (17162): # 9 FirebaseAuth.signInWithEmailAndPassword (пакет: firebase_auth / firebase_auth.dart)
E / флаттер (17162):
E / flutter (17162): # 10 Session.login. (Упаковка: mood_map / утилиты / session.dart: 31: 24)
E / flutter (17162): # 11 _RootZone.runUnary (dart: async / zone.dart: 1379: 54)
E / flutter (17162): # 12 _FutureListener.handleValue (дротик: async / future_impl.dart: 129: 18)
E / flutter (17162): # 13 Future._propagateToListeners.handleValueCallback (дарт: async / future_impl.dart: 642: 45)
E / flutter (17162): # 14 Future._propagateToListeners (dart: async / future_impl.dart: 671: 32)
E / flutter (17162): # 15 Future._complete (дротик: async / future_impl.dart: 476: 7)
E / flutter (17162): # 16 _SyncCompleter.complete (дарт: async / future_impl.dart: 51: 12)
E / flutter (17162): # 17 _AsyncAwaitCompleter.complete (dart: async / runtime / libasync_patch.dart: 28: 18)
E / flutter (17162): # 18 _completeOnAsyncReturn (dart: async / runtime / libasync_patch.dart: 295: 13)
E / flutter (17162): # 19 Session._checkUserAlreadyExists (пакет: mood_map / utilities / session.dart)
E / флаттер (17162):
E / flutter (17162): # 20 Session.login (пакет: mood_map / utilities / session.dart: 27: 11)
А вот функции, которые задействованы:
static final FirebaseAuth _authenticator = FirebaseAuth.instance;
static void login(BuildContext context, String email, String password) async {
email = email.trim();
password = password.trim();
//Check if the user already exists
await _checkUserAlreadyExists(email).then((exists) {
if(exists) {
_authenticator.signInWithEmailAndPassword(email: email, password: password)
.then((FirebaseUser user) { _loginSuccess(); })
.catchError((Error e) { _loginFailure(context); });
} else {
Utilities.showMessageDialog(context, "That user doesn't exist. Please create an account below.");
}
});
}
----------------------------------------------------------------------
static Future createUserAccount(BuildContext context, email, String password) async {
//Check if the user already exists
await _checkUserAlreadyExists(email).then((exists) {
if(exists) {
Utilities.showMessageDialog(context, "That user already exists. Please login or select another account.");
AppNavigator.navigateToLoginScreen();
} else {
_authenticator.createUserWithEmailAndPassword(email: email, password: password)
.then((FirebaseUser user) { _createUserSuccess(); })
.catchError((Error e) { _createUserFailure(context); });
}
});
}
Короче говоря, вызов _authenticator.signonWithEmailAndPassword () не выполняется. Я знаю, что экземпляр _authenticator работает с другими функциями, поэтому я знаю, что это не проблема самого Firebase.
Меня беспокоит, что я что-то делаю неправильно, вызывая другую асинхронную функцию _authenticator.signonWithEmailAndPassword () из другой асинхронной функции _checkIfUserAlreadyExists (). Кажется, что это должно быть нормально делать изнутри блока .then () из того, что я прочитал, но сообщение об ошибке кажется довольно настойчивым, что это как-то связано с настройкой асинхронного характера вызовов функций.
Мысли