У меня есть страница регистрации с моей формой регистрации, а затем класс AuthService, который я вызываю, чтобы зарегистрировать пользователя, возвращая сопоставленный пользовательский класс User. Я могу проверить, не является ли результат вызова функции нулевым, и, следовательно, переместить моего пользователя на домашнюю страницу, но я не могу понять, как задать setState или подобное, чтобы фактически показать пользователю сообщения Firebase Auth на моей странице регистрации, как блок try / catch находится в моем классе обслуживания auth.
Это мой сокращенный виджет экрана регистрации:
class RegistrationScreen extends StatefulWidget {
@override
_RegistrationScreenState createState() => _RegistrationScreenState();
}
class _RegistrationScreenState extends State<RegistrationScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
//abbreviated...
RoundedButton(
onPressed: () async {
if (_formKey.currentState.validate()) {
dynamic result = await _auth.registerWithEmailAndPassword(email, password, displayName);
if (result != null) {
Navigator.pushNamedAndRemoveUntil(context, Home.id, (_) => false);
}
}
}
}
}
registerWithEmailAndPassword находится в импортированном классе AuthService auth.dart:
class AuthService {
final FirebaseAuth _auth = FirebaseAuth.instance;
final _firestore = Firestore.instance;
//create User object
User _userFromFirebaseUser(FirebaseUser user) {
return user != null ? User(uid: user.uid, displayName: user.displayName) : null;
}
//auth change user stream
Stream<User> get user {
return _auth.onAuthStateChanged
.map(_userFromFirebaseUser);
}
// register
Future registerWithEmailAndPassword(String email, String password, String displayName) async {
try {
AuthResult result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
FirebaseUser user = result.user;
return _userFromFirebaseUser(user);
} catch(e) {
print(e);
}
}
}
Если я проверю это с плохо отформатированное электронное письмо, которое я правильно печатаю на консоли:
flutter: PlatformException(ERROR_INVALID_EMAIL, The email address is badly formatted., null)
Однако как я могу использовать это PlatformException для setState или аналогичного на моем экране регистрации, чтобы показать e.message пользователю?
Спасибо.