Error handling topic

It's Essential

Any errors that may occur in a StateX object is directed to its function, onError(). Depending on whether it's a particular exception that can be handled, or an unanticipated error that will cause the app to terminate, the onError() will be the first to receive the details. This is an opportunity for you to close any critical resources or services and 'fail gracefully' before the error is then recorded in the device's logs.

  /// This function is called when an error occurred.
  void onError(FlutterErrorDetails details) {}
Contents
Seeing Red On Error Control Your Error
When starting up the example app that accompanies the state_extended package, you're presented with a variation of the counter app. It's three pages of counter apps each highlighting particular functions and features. With the first page, for example, one feature demonstrated is the handling of an error every time you press the '+' button. The error is caught and the count is incremented regardless. Because the error was anticipated, it's recorded and then the app increments as intended. The State object, Page1State, catches this particular error in its onError() function.

Seeing Red

In the first screenshot below, is of the FloatingActionButton widget containing the error. As you see, an Exception is deliberately thrown when the button is tapped. (Note, the error is not thrown when running in a test environment.) Such an error would normally cause Flutter's default handler, dumpErrorToConsole, to record the error in the device's error logs. If the error had occurred while attempting to display a widget, it would further present a description of the error on a 'red screen' when in development, and on a gray screen when in production.

On Error

In this case, the error logs are written to, but the count still incremented. Flutter's FlutterError.onError was assigned an error handler that allows the State object to possibly address its errors. In the second screenshot below, the onError() function determines the incrementation was interrupted and so attempts once again. This is a very simple example, but you can see the potential to better handle errors in your own app.

page_01.dart page_01.dart

Control Your Error

The onError() function is supplied by the mixin, StateXonErrorMixin. The StateX class utilizes it, but the StateXController does not. However, it can if the need arises. Care must be taken when implementing the onError() function in Controllers as one may catch an error intended for another. But if used judiciously, there may be instances where a controller should catch and handle any failed operation of its own doing.

The first screenshot below demonstrates how you might seek out such controllers when the '+' button error occurred. The StateX object goes through its controllers and calls those with a onError() function of their own.

page_01.dart yet_another_controller.dart

Further information under the topic: AppStateX class

Mixins

RecordExceptionMixin StateX class Error handling
Record an exception
StateXonErrorMixin StateX class Error handling
Supply an 'error handler' routine if something goes wrong. It need not be implemented, but it's their for your consideration.