Я делаю приложение со списком фильмов во Flutter, и когда я открываю приложение, я отображаю список самых просматриваемых фильмов.Когда я нажимаю кнопку, я выбираю новые данные и добавляю их в приемник, который затем отправляется в StreamBuilder и должен обновить экран новыми данными.
Но этого не происходит.Я не могу понять, почему!
Вот мой код для репозитория:
class MoviesRepository {
final _movieApiProvider = MovieApiProvider();
fetchAllMovies() async => _movieApiProvider.fetchMovieList();
fetchAllSimilarMovies(genreIdeas) async => await _movieApiProvider.fetchMoviesLikeThis(genreIdeas);
fetchTopRatedMovies() async => await _movieApiProvider.fetchTopRatedMovieList();
}
Вот мой код для блока:
class MoviesBloc {
final _moviesRepository = MoviesRepository();
final _moviesFetcher = BehaviorSubject<Result>();
Sink<Result> get allMovies => _fetcherController.sink;
final _fetcherController = StreamController<Result>();
Observable<Result> get newResults => _moviesFetcher.stream;
fetchAllMovies() async {
Result model = await _moviesRepository.fetchAllMovies();
allMovies.add(model);
}
fetchTopRatedMovies() async{
Result model = await _moviesRepository.fetchTopRatedMovies();
allMovies.add(model);
}
dispose() {
_moviesFetcher.close();
_fetcherController.close();
}
MoviesBloc() {
_fetcherController.stream.listen(_handle);
}
void _handle(Result event) {
_moviesFetcher.add(event);
}
}
final bloc = MoviesBloc();
ОБНОВЛЕНИЕ
А вот мой код для StreamBuilder:
class HomeScreenListState extends State<HomeScreenList> {
@override
void initState() {
super.initState();
print("init");
bloc.fetchAllMovies();
}
@override
void dispose() {
super.dispose();
bloc.dispose();
}
@override
Widget build(BuildContext context) {
return StreamBuilder<Result>(
builder: (context, snapshot) {
if (snapshot.hasData) {
print("new data is here");
return buildList(snapshot);
} else if (snapshot.hasError) {
return Text('Error!!');
}
return Center(
child: CircularProgressIndicator(),
);
},
stream: bloc.newResults,
);
}
}
И это кнопка, которая вызывает получение новых данных и добавление их в приемник:
child: RaisedButton(onPressed: () {
bloc.fetchTopRatedMovies();
},
Эта кнопка выбирает фильмы с самым высоким рейтингом и добавляет их в тот же приемник.Теперь StreamBuilder должен подобрать новые данные, как я думаю.
В чем проблема ??