Je veux retourner un futur avec une valeur d'un bloc try catch :

  Future<UserCredential> createUser(String email, String password) async {
    try {
      return FirebaseAuth.instance
          .createUserWithEmailAndPassword(email: email, password: password);
    } on FirebaseAuthException catch (e) {
      if (e.code == 'weak-password') {
        Get.snackbar(
            'Error Creating Account', 'The password provided is too weak.',
            snackPosition: SnackPosition.BOTTOM);
      } else if (e.code == 'email-already-in-use') {
        Get.snackbar('Error Creating Account',
            'The account already exists for that email.',
            snackPosition: SnackPosition.BOTTOM);
      }
    } catch (e) {
      print(e);
      Get.snackbar('Error Creating Account', e.message as String,
          snackPosition: SnackPosition.BOTTOM);
    }
  }

Mais cela donne cette erreur:

Cette fonction a un type de retour 'FutureOr', mais ne se termine pas par une instruction return. Essayez d'ajouter une instruction return ou de changer le type de retour en « void ».

Puis-je faire de ce retour un futur qui contient une valeur et gère également l'erreur dans la fonction ou dois-je changer le type de retour en Future<void> ?

0
BeniaminoBaggins 14 nov. 2020 à 02:22

1 réponse

Meilleure réponse

Votre valeur de retour doit être du type déclaré avec le type générique de Future. S'il existe des chemins de code qui ne renvoient pas de UserCredential, vous ne pouvez pas utiliser cette déclaration. Si vous n'avez pas de valeur de retour, alors oui, cela devrait être Future<void>. Mais il semble que vous ayez une valeur de retour dans au moins un chemin de code.

Envisagez plutôt de retirer tout le code de l'interface utilisateur de cette méthode et de simplement laisser la fonction lancer ce qu'elle lance (ou relancer autre chose). Ensuite, faites en sorte que l'appelant de cette fonction détecte l'erreur et décide ce qu'il doit afficher dans l'interface utilisateur pour ce cas.

1
Doug Stevenson 13 nov. 2020 à 23:31