简体   繁体   中英

ScanStreamTransformer in bloc pattern

I have faced this problem:

Performing hot restart... Syncing files to device Android SDK built for x86... lib/blocs/movie_detail_bloc.dart:28:22: Error: A comparison expression can't be an operand of another comparison expression. Try putting parentheses around one of the comparisons. Future{}, ^ lib/blocs/movie_detail_bloc.dart:28:13: Error: The operator '<' isn't defined for the class 'Type'.

  • 'Type' is from 'dart:core'. Try correcting the operator to an existing operator, or defining a '<' operator. Future{}, ^ Restarted application in 850ms.

Here is my code part =>

class MovieDetailBloc {
  final _repository = Repository();
  final _movieId = PublishSubject<int>();
  final _trailers = BehaviorSubject<Future<Trailers>>();

  Function(int) get fetchTrailersById => _movieId.sink.add;

  Stream<Future<Trailers>> get movieTrailers => _trailers.stream;

  MovieDetailBloc() {
    _movieId.stream.transform(_itemTransformer()).pipe(_trailers);
  }

  _itemTransformer() {
    return ScanStreamTransformer<int, Future<Trailers>>((trailer, int id, index) {
        debugPrint(index.toString());
        trailer = _repository.fetchTrailers(id);
        debugPrint(trailer.toString());
        return trailer;
      },
      Future<Trailers>{},     <---error line--
    );
  }

Here is the answer, this is working.

class MovieDetailBloc {
  final _repository = Repository();
  final _movieId = PublishSubject<int>();
  final _trailers = BehaviorSubject<Future<Trailers>>();
  int id= 0;        //for emptyFuture
  List<Trailer?> trailer = [];  //for emptyFuture

  Function(int) get fetchTrailersById => _movieId.sink.add;

  Stream<Future<Trailers>> get movieTrailers => _trailers.stream;

  MovieDetailBloc() {
    _movieId.stream.transform(_itemTransformer()).pipe(_trailers);
  }

  _itemTransformer() {
    return ScanStreamTransformer<int, Future<Trailers>>((trailer, int id, index) {
        trailer = _repository.fetchTrailers(id);
        return trailer;
      },
      emptyFuture(), //making an unimportant function for null safety
    );
  }

  Future<Trailers> emptyFuture() async {
    return Trailers(id, trailer);
  }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM