Skip to content

Instantly share code, notes, and snippets.

@Albert221
Created July 31, 2023 09:21
Show Gist options
  • Select an option

  • Save Albert221/c0da244cec07f7f2de317d19d9a56a27 to your computer and use it in GitHub Desktop.

Select an option

Save Albert221/c0da244cec07f7f2de317d19d9a56a27 to your computer and use it in GitHub Desktop.

Revisions

  1. Albert221 created this gist Jul 31, 2023.
    37 changes: 37 additions & 0 deletions map_value_stream.dart
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,37 @@
    import 'package:async/async.dart';
    import 'package:rxdart/rxdart.dart';

    class MapValueStream<T, U> extends DelegatingStream<U>
    implements ValueStream<U> {
    MapValueStream(this._source, this._mapper) : super(_source.map(_mapper));

    final ValueStream<T> _source;
    final U Function(T) _mapper;

    @override
    U get value => _mapper(_source.value);

    @override
    U? get valueOrNull {
    if (_source.value case final value?) {
    return _mapper(value);
    }

    return null;
    }

    @override
    bool get hasValue => _source.hasValue;

    @override
    Object get error => _source.error;

    @override
    Object? get errorOrNull => _source.errorOrNull;

    @override
    bool get hasError => _source.hasError;

    @override
    StackTrace? get stackTrace => _source.stackTrace;
    }