Stream<T>.error 构造函数

  1. @Since("2.5")
Stream<T>.error(
  1. Object error,
  2. [StackTrace? stackTrace]
)

创建一个在完成后发出单个错误事件的流。

此流发出一个包含 errorstackTrace 的单个错误事件,然后通过完成事件完成。

示例

Future<void> tryThings(Stream<int> data) async {
  try {
    await for (var x in data) {
      print('Data: $x');
    }
  } catch (e) {
    print(e);
  }
}
tryThings(Stream<int>.error('Error')); // prints "Error".

返回的流在效果上相当于使用 Future<T>.error(error, stackTrace).asStream()(() async* { throw error; } ()) 创建的流,不过您还可以控制堆栈跟踪。

实现

@Since("2.5")
factory Stream.error(Object error, [StackTrace? stackTrace]) {
  // TODO(40614): Remove once non-nullability is sound.
  checkNotNullable(error, "error");
  return (_AsyncStreamController<T>(null, null, null, null)
        .._addError(error, stackTrace ?? AsyncError.defaultStackTrace(error))
        .._closeUnchecked())
      .stream;
}