0Pricing
Flutter Mobile Development · Leçon

Gestion des erreurs asynchrones

Mettez en œuvre des stratégies robustes de gestion des erreurs pour les opérations asynchrones afin que votre application gère correctement les échecs réseau et les exceptions.

Gestion des erreurs asynchrones est une leçon Flutter Mobile Development gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Flutter Mobile Development, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Flutter Mobile Development comprend 4 leçons au total.

Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.

Handling Unpredictable Async Errors

Asynchronous operations, like fetching data from the internet or reading files, are inherently unpredictable. They might succeed, fail, or even time out.

Robust error handling is crucial to prevent your app from crashing and to provide a smooth user experience. It allows you to gracefully manage these failures.

`try-catch` for Async Operations

The familiar try-catch block in Dart is your primary tool for handling exceptions in asynchronous code. When an await expression throws an error, it can be caught by an enclosing try-catch block.

  • try: Contains the code that might throw an exception.
  • catch: Catches and handles the exception if one occurs.
  • on: (Optional) Catches specific types of exceptions.

Catching a Simulated Error

Let's see try-catch in action. This example simulates a network error by throwing an Exception within an async function. Notice how catch handles it.

import 'dart:async';

Future<String> fetchData() async {
  await Future.delayed(Duration(seconds: 1));
  // Simulate a network error
  throw Exception("Failed to fetch data!");
  return "Data received"; // This line won't be reached
}

void main() async {
  print("Starting data fetch...");
  try {
    String data = await fetchData();
    print("Success: $data");
  } catch (e) {
    print("Error caught: $e");
  } finally {
    print("Fetch attempt complete.");
  }
}

Handling Specific Exception Types

Sometimes, you want to handle different types of errors in different ways. The on keyword allows you to catch specific exception types, making your error handling more precise.

For example, you might handle a SocketException (network issue) differently from a generic Exception.

Targeted Error Handling

Here, we define two types of errors: a custom NetworkException and a generic Exception. The on clause lets us provide specific handling for each.

import 'dart:async';

class NetworkException implements Exception {
  final String message;
  NetworkException(this.message);
  @override
  String toString() => 'NetworkException: $message';
}

Future<void> performNetworkCall(bool shouldFailNetwork) async {
  await Future.delayed(Duration(milliseconds: 500));
  if (shouldFailNetwork) {
    throw NetworkException("No internet connection!");
  } else {
    throw Exception("An unknown error occurred.");
  }
}

void main() async {
  print("Attempt 1: Simulate network failure");
  try {
    await performNetworkCall(true);
  } on NetworkException catch (e) {
    print("Caught specific network error: ${e.message}");
  } catch (e) {
    print("Caught generic error: $e");
  }

  print("\nAttempt 2: Simulate unknown error");
  try {
    await performNetworkCall(false);
  } on NetworkException catch (e) {
    print("Caught specific network error: ${e.message}");
  } catch (e) {
    print("Caught generic error: $e");
  }
}

Ensuring Cleanup with `finally`

The finally block is an optional part of a try-catch statement. Code inside this block will always execute, regardless of whether an exception was thrown or caught.

It's perfect for cleanup operations, like closing a file stream or dismissing a loading indicator, ensuring resources are properly managed.

Alternative: `Future.catchError`

While try-catch works well with async/await, you can also handle errors directly on a Future object using its .catchError() method. This is often used when chaining Futures or when not using await immediately.

It takes a function that will be called if the Future completes with an error.

Handling Errors with `catchError`

Here's how .catchError() can be used. Notice that the error is handled as part of the Future's completion chain, without needing an async function or await for the error handling itself.

import 'dart:async';

Future<String> getUserData() {
  return Future.delayed(Duration(seconds: 1)).then((_) {
    throw Exception("User data not found!");
    return "User data"; // Unreachable
  });
}

void main() {
  print("Fetching user data...");
  getUserData().then((data) {
    print("Success: $data");
  }).catchError((error) {
    print("Error with .catchError(): $error");
  }).whenComplete(() {
    print("User data fetch completed.");
  });
}

Good Practices for Error Handling

Effective error handling makes your app robust and user-friendly:

  • Log errors: Use a logging framework to record errors for debugging.
  • Provide feedback: Inform the user about what went wrong (e.g., "Network unavailable").
  • Retry mechanism: For transient network issues, consider offering a retry option.
  • Avoid empty catch blocks: Always handle or re-throw errors, don't just swallow them.

Async Error Handling Check

Consider the following Dart code snippet. Which statements about its error handling are true?

import 'dart:async';

Future<String> riskyOperation() async {
  await Future.delayed(Duration(milliseconds: 100));
  if (DateTime.now().second % 2 == 0) {
    throw FormatException("Invalid data format!");
  }
  return "Data processed.";
}

void main() async {
  try {
    String result = await riskyOperation();
    print("Result: $result");
  } on FormatException catch (e) {
    print("Specific error: ${e.message}");
  } catch (e) {
    print("Generic error: $e");
  } finally {
    print("Operation finished.");
  }
}

Recap: Mastering Async Errors

In this lesson, we explored how to handle errors in asynchronous Dart and Flutter applications. You learned:

  • The importance of robust error handling.
  • Using try-catch with async/await.
  • Catching specific exceptions with on.
  • Ensuring cleanup with finally.
  • An alternative: Future.catchError().
  • Best practices for building resilient apps.

Proper error handling is key to creating stable and user-friendly mobile experiences!

Questions Fréquemment Posées

La leçon « Gestion des erreurs asynchrones » est-elle gratuite ?

Oui — le texte complet de « Gestion des erreurs asynchrones » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Flutter Mobile Development, passe à CoddyKit PRO. Le cours Flutter Mobile Development comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Gestion des erreurs asynchrones » ?

Mettez en œuvre des stratégies robustes de gestion des erreurs pour les opérations asynchrones afin que votre application gère correctement les échecs réseau et les exceptions. Tu pratiques Flutter Mobile Development avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Flutter Mobile Development ?

Aucune expérience préalable n'est requise. Flutter Mobile Development sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Gestion des erreurs asynchrones » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Flutter Mobile Development ?

Oui. Chaque leçon Flutter Mobile Development inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Futures et Async/Await
  2. Requêtes HTTP et JSON
  3. Gestion des erreurs asynchrones
  4. Flux et données réactives
← Retour à Flutter Mobile Development