Dart / Flutter - Debugger stops on caught exceptions
Solution 1
This is a limitation of the Dart VM. It does not correctly detect exceptions that are caught with catchError()
so it causes the debugger to pause on them. There's some discussion about this here:
https://github.com/flutter/flutter/issues/33427#issuecomment-504529413
If you click Continue/Resume there should be no difference in behaviour, but as a workaround you could convert the code to use real try
/catch
instead of catchError()
or untick the option in the Debug side bar to break on uncaught exceptions (though obviously this will affect real uncaught exceptions too - although in Flutter they're not too common since the framework catchs most exceptions).
Solution 2
Here is a supplemental image (VS Code) to the Danny's answer:
Solution 3
If you are looking to bypass the exception(s) so the app doesn't stop, you can untick the "Uncaught Exceptions" box under "Breakpoints" on the left
TheGeekZn
Full stack software developer specialising in open source, scalable systems
Updated on December 12, 2022Comments
-
TheGeekZn over 1 year
In a relatively simple block of code that checks an API endpoint (determining connection state), I rely on a
try..catch
as the mechanism to validate if the application can communicate with the server.The issue I'm having is that while debugging, the debugger always stops on the connection line (when the application is offline) even though I am handling the errors internally.
Future<bool> isOnline() async { try { // VSCode debugger always stops on this line when no connection await http .get('${consts.apiBaseUrl}/api/ping') .timeout(Duration(seconds: normalTimeoutLength)) .catchError( (_) { // Trying catchError on the Future _isOnline = false; return false; }, ); _isOnline = true; return true; } on HttpException catch (_) { // Trying to catch HTTP Exceptions _isOnline = false; return false; } on SocketException catch (_) { // Trying to catch Socket Exceptions _isOnline = false; return false; } }