0
0
Fluttermobile~20 mins

Error handling for network calls in Flutter - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Network Error Handling Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
ui_behavior
intermediate
2:00remaining
Handling network error UI feedback
You have a Flutter app that fetches data from the internet. Which option correctly shows a simple error message on the screen when the network call fails?
Flutter
Future<String> fetchData() async {
  throw Exception('Network error');
}

class MyWidget extends StatefulWidget {
  @override
  State<MyWidget> createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  late Future<String> data;

  @override
  void initState() {
    super.initState();
    data = fetchData();
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<String>(
      future: data,
      builder: (context, snapshot) {
        if (snapshot.hasError) {
          return Text('Error occurred');
        } else if (snapshot.hasData) {
          return Text(snapshot.data!);
        } else {
          return CircularProgressIndicator();
        }
      },
    );
  }
}
AUse FutureBuilder and check snapshot.hasError to show Text('Error occurred')
BUse try-catch inside build() method to catch error and show Text('Error occurred')
CWrap fetchData() call in setState and catch error to show Text('Error occurred')
DIgnore errors and always show CircularProgressIndicator()
Attempts:
2 left
💡 Hint
FutureBuilder has a property to detect errors from the future.
🧠 Conceptual
intermediate
1:30remaining
Understanding try-catch with async network calls
What happens if you do not use try-catch when awaiting a network call that throws an exception in Flutter?
Flutter
Future<String> fetchData() async {
  throw Exception('Network failure');
}

void load() async {
  var result = await fetchData();
  print(result);
}
AThe app will crash unless the error is caught somewhere else
BThe error is ignored and result is null
CThe app shows a default error message automatically
DThe network call retries automatically
Attempts:
2 left
💡 Hint
Think about what happens when an exception is not caught in async code.
lifecycle
advanced
2:30remaining
Properly cancelling network calls on widget disposal
You start a network call in initState() of a StatefulWidget. What is the best way to avoid updating the UI after the widget is disposed?
Flutter
class MyWidget extends StatefulWidget {
  @override
  State<MyWidget> createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  late Future<String> data;

  @override
  void initState() {
    super.initState();
    data = fetchData();
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<String>(future: data, builder: (context, snapshot) {
      if (snapshot.hasData) return Text(snapshot.data!);
      return CircularProgressIndicator();
    });
  }

  @override
  void dispose() {
    super.dispose();
  }
}
ACall setState(null) in dispose() to clear UI updates
BNo action needed, Flutter handles it automatically
CUse a CancelableOperation or check mounted before calling setState
DCall data.cancel() in dispose() to stop the future
Attempts:
2 left
💡 Hint
Widgets can be disposed before async calls finish, causing errors if UI updates happen.
📝 Syntax
advanced
2:00remaining
Identify the error in this network call error handling code
What error does this Flutter code produce when fetchData throws an exception?
Flutter
Future<String> fetchData() async {
  throw Exception('Failed');
}

void loadData() async {
  try {
    var data = fetchData();
    print(data);
  } catch (e) {
    print('Error caught');
  }
}
ARuntime error because fetchData is not awaited
BCatches the error and prints 'Error caught'
CSyntaxError due to missing await keyword
DPrints Instance of 'Future<String>' instead of data
Attempts:
2 left
💡 Hint
Look carefully at how fetchData() is called inside try block.
🔧 Debug
expert
3:00remaining
Debugging silent failure in network call error handling
A Flutter app uses this code to fetch data and show errors. But when the network fails, no error message appears and the loading spinner stays forever. What is the cause?
Flutter
Future<String> fetchData() async {
  throw Exception('Network down');
}

class MyWidget extends StatefulWidget {
  @override
  State<MyWidget> createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  late Future<String> data;

  @override
  void initState() {
    super.initState();
    data = fetchData().catchError((e) {
      print('Caught error');
    });
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<String>(
      future: data,
      builder: (context, snapshot) {
        if (snapshot.hasError) {
          return Text('Error occurred');
        } else if (snapshot.hasData) {
          return Text(snapshot.data!);
        } else {
          return CircularProgressIndicator();
        }
      },
    );
  }
}
AFutureBuilder does not support catchError on futures
BcatchError returns a Future that completes successfully, hiding the error from FutureBuilder
CThe error is thrown twice causing FutureBuilder to ignore it
DThe CircularProgressIndicator blocks error display
Attempts:
2 left
💡 Hint
catchError can transform the Future result and affect error propagation.