【发布时间】:2022-01-15 20:21:44
【问题描述】:
我是 Flutter 的新手,不确定这是否是正确的方法。我正在按照 YouTube 教程使用 TMDB API 创建电影应用程序,并尝试将 category.dart(下面的评论)中的“genreId”传递给 MovieBloc.dart。是否可以发送“genreId”?如果是,我该如何通过?如果没有,最好的方法是什么? 谢谢
category.dart
final movieBloc = MovieBloc();
setState(() {
selectedGenre = genre.id;
movieBloc.eventSink.add(MovieControlAction.byGenre); // send genreId through here??
});
movie_bloc.dart
import 'dart:async';
import 'package:flutter_api/Model/movie.dart';
import 'package:flutter_api/Service/api_service.dart';
enum MovieControlAction { fetch, delete, byGenre, }
class MovieBloc {
final service = ApiService();
final _stateStreamController = StreamController<List<Movie>>();
StreamSink<List<Movie>> get _movieSink => _stateStreamController.sink;
Stream<List<Movie>> get movieStream => _stateStreamController.stream;
final _eventStreamController = StreamController<MovieControlAction>();
StreamSink<MovieControlAction> get eventSink =>
_eventStreamController.sink; //input
Stream<MovieControlAction> get _eventStream =>
_eventStreamController.stream; //output
MovieBloc() {
_eventStream.listen((event) async {
if (event == MovieControlAction.fetch) {
try {
var movies = await service.getNowPlayingMovie();
if (movies != null) {
_movieSink.add(movies);
} else {
_movieSink.addError('Null');
}
} on Exception catch (e) {
print(e);
_movieSink.addError('Something went wrong');
}
} else if (event == MovieControlAction.byGenre) {
var moviesByGenre = await service.getMovieByGenre(genreId);
if (moviesByGenre != null) {
_movieSink.add(moviesByGenre);
} else {
_movieSink.addError('Null');
}
}
});
}
void dispose() {
_stateStreamController.close();
_eventStreamController.close();
}
}
【问题讨论】:
标签: flutter enums stream bloc sink