useStreamEffect<T> function
Implementation
AsyncSnapshot<T?> useStreamEffect<T>(
Stream<T> Function() block,
List<Object?> keys,
) {
final ret = useState(AsyncSnapshot<T?>.waiting());
useEffect(
() {
StreamSubscription<T> sub;
try {
sub = block().listen(
(x) => ret.value = AsyncSnapshot.withData(ConnectionState.active, x),
onError: (Object e) =>
ret.value = AsyncSnapshot.withError(ConnectionState.active, e),
onDone: () => ret.value =
const AsyncSnapshot.withData(ConnectionState.done, null),
);
} catch (e) {
ret.value = AsyncSnapshot.withError(ConnectionState.active, e);
rethrow;
}
return sub.cancel;
},
[block, ...keys],
);
return ret.value;
}