fluttererror-handlingfirebase-authenticationhttpexception

"on HttpException catch (error)" desn't work in flutter


I made this code to handle error from the server Firebase with flutter :

This is the main function :

    try {
  if (_authMode == AuthMode.Login) {
    print("log in");
    await Provider.of<Auth>(context, listen: false)
        .signIn(_authData['email'], _authData['password']);
  } else {
    await Provider.of<Auth>(context, listen: false)
        .signUp(_authData['email'], _authData['password']);
  }
} on HttpException catch (error) {
  print("Check error");
  if (error.toString().contains("EMAIL_EXISTS")) {
    _ServerError =
        "The email address is already in use by another account.";
  }
  if (error.toString().contains("TOO_MANY_ATTEMPTS_TRY_LATER")) {
    _ServerError =
        "We have blocked all requests from this device due to unusual activity.\n Try again later.";
  } else {
    _ServerError = "Something wrong. \n Try again later!";
  }
} catch (error) {
  print(error.toString() );
}

This is the called function :

  Future<void> signIn(String? email, String? password) async {
const _url =
    "https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=APICODE";

_authentication(_url, email, password);}

  Future<void> _authentication(
  String _url, String? email, String? password) async {
try {
  final _response = await http.post(Uri.parse(_url),
      body: json.encode({
        'email': email,
        'password': password,
        'returnSecureToken': true
      }));
  final _responseData = json.decode(_response.body);
  if (_responseData['error'] != null) {
    throw HttpException(_responseData['error']['message']);
  }
} catch (error) {
  throw error;
}}

But the problem is when the called function throw the HttpException error, I don't get it in the main function because the Catch doesn't work because I don't get the message "check error" in the panel ?!

this is the panel : The panel Can you help me please ?


Solution

  • The problem is I forgot to add return to called function :

        Future<void> signIn(String? email, String? password) async {
    const _url =
        "https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=APICODE";
    
    return _authentication(_url, email, password);
    }