异常

错误的两种类型

Exception 类

Exception classopen in new window

名称说明
DeferredLoadException延迟加载错误
FormatException格式错误
IntegerDivisionByZeroException整数除零错误
IOExceptionIO 错误
IsolateSpawnException隔离产生错误
TimeoutException超时错误

可以捕获,可以安全处理

Error 类

Error classopen in new window

名称说明
AbstractClassInstantiationError抽象类实例化错误
ArgumentError参数错误
AssertionError断言错误
AsyncError异步错误
CastErrorCast 错误
ConcurrentModificationError并发修改错误
CyclicInitializationError周期初始错误
FallThroughErrorFall Through 错误
JsonUnsupportedObjectErrorjson 不支持错误
NoSuchMethodError没有这个方法错误
NullThrownErrorNull 错误错误
OutOfMemoryError内存溢出错误
RemoteError远程错误
StackOverflowError堆栈溢出错误
StateError状态错误
UnimplementedError未实现的错误
UnsupportedError不支持错误

一般用在不可恢复,容易崩溃的情况

抛出错误

  // Exception 对象
  throw new FormatException('这是一个格式错误提示');

  // Error 对象
  throw new OutOfMemoryError();

  // 任意对象
  throw '这是一个异常';

捕获错误

  try {
    // throw new FormatException('这是一个格式错误提示');
    throw new OutOfMemoryError();
  } on OutOfMemoryError {
    print('没有内存了');
  } catch (e) {
    print(e);
  }

重新抛出错误

  try {
    throw new OutOfMemoryError();
  } on OutOfMemoryError {
    print('没有内存了');
    rethrow;
  } catch (e) {
    print(e);
  }

Finally 执行

  try {
    throw new OutOfMemoryError();
  } on OutOfMemoryError {
    print('没有内存了');
    rethrow;
  } catch (e) {
    print(e);
  } finally {
    print('end');
  }

自定义异常

class DioError implements Exception {
  DioError(this.message, this.type);

  final String message;
  final String type;

  
  String toString() {
    return 'DioError{message: $message, type: $type}';
  }
}

void main(List<String> args) {
  throw DioError("error", "type");
}
Last Updated:
Contributors: ducafecat