New Text Document
New Text Document
dart';
import 'package:flutter_movie_streaming_app/movie/models/movie.dart';
import 'package:flutter_movie_streaming_app/movie/pages/movie_detail_page.dart';
import
'package:flutter_movie_streaming_app/movie/providers/movie_get_now_playing_provider
.dart';
import
'package:flutter_movie_streaming_app/movie/providers/movie_get_top_rated_provider.d
art';
import 'package:flutter_movie_streaming_app/widgets/item_model_widget.dart';
import 'package:provider/provider.dart';
import
'package:flutter_movie_streaming_app/movie/providers/movie_get_discover_provider.da
rt';
import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
@override
void initState() {
switch (widget.type) {
case TypeMovie.discover:
_pagingController.addPageRequestListener((pageKey) {
context.read<MovieGetDiscoverProvider>().getDiscoverWithPaging(
context,
pagingController: _pagingController,
page: pageKey);
});
super.initState();
break;
case TypeMovie.popular:
_pagingController.addPageRequestListener((pageKey) {
context.read<MovieGetTopRatedProvider>().getPopularWithPaging(context,
pagingController: _pagingController, page: pageKey);
});
break;
case TypeMovie.nowPlaying:
_pagingController.addPageRequestListener((pageKey) {
context.read<MovieGetNowPlayingProvider>().getNowPlayingWithPaging(
context,
pagingController: _pagingController,
page: pageKey);
});
break;
}
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Builder(builder: (_) {
switch (widget.type) {
case TypeMovie.discover:
return const Text('Discover Movies');
case TypeMovie.popular:
return const Text('Top Rated Movies');
case TypeMovie.nowPlaying:
return const Text('Now Playing Movies');
}
}),
),
body: PagedListView.separated(
pagingController: _pagingController,
padding: const EdgeInsets.all(16.0),
builderDelegate: PagedChildBuilderDelegate<MovieModel>(
itemBuilder: (context, item, index) {
return ItemMovieWidget(
movie: item,
heightBackdrop: 260,
widthBackdrop: double.infinity,
heightPoster: 140,
widthPoster: 80,
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) {
return MovieDetailPage(id: item.id);
},
),
);
},
);
},
),
separatorBuilder: (context, index) {
return const SizedBox(
height: 10,
);
},
),
);
}
@override
void dispose() {
_pagingController.dispose();
super.dispose();
}
}