Errors are special in Dart.
They are intended for programming errors, and are not made for being caught. They also have special handling that stores the current stack trace in the error at the time of throwing (if you extend Error and not just implements it).
Exceptions are everything else. There isn't really a need for an Exception class.
You can extend or implement Exception to document that your class is intended for being thrown as a kind of alternative return value for exceptional, but not erroneous, cases. Or you can just use any class that you want.
/L