Я пытаюсь использовать псевдоним, используя typedef
. Вот объявление
typedef OnPosterCallBack = void Function (int movieId);
Я хотел бы использовать этот обратный вызов на onTap()
как onTap: () => onPosterCallBack(movieItems.movieId)
.
Мой виджет сетки выглядит так:
, который используется в:
Widget build(BuildContext context) {
final MoviesBloc bloc = BlocProvider.of<MoviesBloc>(context);
return StreamBuilder<MoviesViewModel>(
stream: bloc.moviesStream,
builder: (context, snapshot) {
if (snapshot.hasData) {
if (snapshot.data != null) {
return buildGrid(snapshot.data, (movieId) {
bloc.selectedMovieModelStream.listen(movieId);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => MovieDetailsScreen()));
});
} else {
return Center(
child: Text('No Image Found'),
);
}
}
return Center(child: CircularProgressIndicator());
},
);
}
Я хотел бы перейти на страницу подробностей mov ie и отправить movieId
следующему виджету, чтобы я мог получить значение, требуемое для mov ie подробный запрос.
Я отправляю mov ie id из блока c, а именно:
PublishSubject<int>();
Stream<int> get selectedMovieModelStream =>
_selectedMovieIDPipe.stream;
MoviesBloc({DiscoverMoviesService discoverMoviesService}) {
_discoverMoviesService = discoverMoviesService ??= DiscoverMoviesService();
_selectedMovieIDPipe.listen(_selectedMovieModel);
}
_selectedMovieModel(int movieId) {
if (_model != null) {
var movies = _model.movies.expand((itemId) => _model.movies).toList();
_model.movies.first = movies.firstWhere((movie) => movie.movieId == movieId);
}
}
Как устранить следующую ошибку:
The following assertion was thrown while handling a gesture:
type 'int' is not a subtype of type '(int) => void'