· 5 years ago · Feb 07, 2021, 02:54 PM
1//model
2class Shows {
3 final int id;
4 final String showTitle;
5 final String bannerImage;
6 final bool banner;
7
8 Shows({
9 this.id,
10 this.showTitle,
11 this.bannerImage,
12 this.banner,
13 });
14
15 factory Shows.fromJson(Map<String, dynamic> json) {
16 return Shows(
17 id: json['id'],
18 showTitle: json['ShowTitle'],
19 bannerImage: json['BannerImage'],
20 banner: json['Banner'],
21 );
22 }
23}
24
25//api
26import 'dart:convert';
27import 'package:anime_shows/models/shows.dart';
28import 'package:flutter/material.dart';
29import 'package:http/http.dart' as http;
30
31class ShowProvider with ChangeNotifier {
32 ShowProvider() {
33 this.fetchTask();
34 }
35
36 List<Shows> _shows = [];
37
38 List<Shows> get shows {
39 return [..._shows];
40 }
41
42 Future fetchTask() async {
43 final url = "http://10.0.2.2:8000/api/show";
44 final response = await http.get(url);
45 if (response.statusCode == 200) {
46 var data = json.decode(response.body) as List;
47 _shows = data.map<Shows>((json) => Shows.fromJson(json)).toList();
48 notifyListeners();
49 }
50 }
51}
52
53//banner
54
55import 'package:flutter/cupertino.dart';
56import 'package:flutter/material.dart';
57
58class BannerWidget extends StatelessWidget {
59 const BannerWidget({
60 Key key,
61 String image,
62 String title,
63 // @required String image,
64 // @required String title,
65 }) : _image = image,
66 _title = title,
67 super(key: key);
68
69 final String _image;
70 final String _title;
71
72 @override
73 Widget build(BuildContext context) {
74 return Container(
75 width: double.infinity,
76 height: 200,
77 margin: EdgeInsets.symmetric(horizontal: 5, vertical: 3),
78 child: Stack(
79 children: [
80 Image.asset(
81 // _image,
82 'assets/images/img1.jpg',
83 // 'https://i.ibb.cozXVWKkk/V-Monster-Musume-no-Oishasan-full-3097933.png',
84 width: double.infinity,
85 fit: BoxFit.cover,
86 ),
87 Container(
88 alignment: Alignment.bottomLeft,
89 padding: EdgeInsets.all(15),
90 child: Text(
91 // _title,
92 'Demo',
93 style: TextStyle(
94 fontSize: 22,
95 fontWeight: FontWeight.w900,
96 color: Colors.white,
97 ),
98 ),
99 )
100 ],
101 ),
102 );
103 }
104}
105
106
107//main
108import 'package:anime_shows/testScreen.dart';
109import 'package:anime_shows/ui/screens/HomeScreen.dart';
110import 'package:anime_shows/utils/serviecs/get_show.dart';
111import 'package:flutter/material.dart';
112import 'package:provider/provider.dart';
113
114void main() {
115 runApp(MyApp());
116}
117
118class MyApp extends StatelessWidget {
119 // This widget is the root of your application.
120 @override
121 Widget build(BuildContext context) {
122 return ChangeNotifierProvider(
123 create: (BuildContext context) => ShowProvider(),
124 child: MaterialApp(
125 title: 'Flutter Demo',
126 debugShowCheckedModeBanner: false,
127 theme: ThemeData(
128 primarySwatch: Colors.blue,
129 visualDensity: VisualDensity.adaptivePlatformDensity,
130 ),
131 home: HomeScreen(),
132 ),
133 );
134 }
135}
136
137
138//case 1 CarouselSlider
139import 'dart:ui';
140import 'package:anime_shows/ui/widgets/Banner.dart';
141import 'package:anime_shows/utils/properties/no_glow.dart';
142import 'package:anime_shows/utils/serviecs/get_show.dart';
143import 'package:carousel_slider/carousel_slider.dart';
144import 'package:flutter/material.dart';
145import 'package:provider/provider.dart';
146
147class HomeScreen extends StatelessWidget {
148 @override
149 Widget build(BuildContext context) {
150 final showp = Provider.of<ShowProvider>(context);
151 return SafeArea(
152 child: Scaffold(
153 backgroundColor: Color(0xff232020),
154 appBar: AppBar(
155 centerTitle: true,
156 backgroundColor: Colors.black,
157 title: Text('App Name'),
158 ),
159 body: Container(
160 width: double.infinity,
161 padding: EdgeInsets.symmetric(vertical: 10),
162 child: ScrollConfiguration(
163 behavior: NoGlowBehavior(),
164 child: ListView(
165 scrollDirection: Axis.vertical,
166 shrinkWrap: true,
167 children: [
168
169 CarouselSlider.builder(
170 options: CarouselOptions(viewportFraction: .99, autoPlay: true),
171 itemCount: showp.shows.length,
172 itemBuilder: (BuildContext context, int index, int realIndex) {
173 return showp.shows[index].banner == true
174 ? BannerWidget(
175 image: showp.shows[index].bannerImage,
176 title: showp.shows[index].showTitle,
177 )
178 : null;
179 },
180 ),
181
182 ],
183 ),
184 ),
185 ),
186 ),
187 );
188 }
189}
190
191
192//case 2 list view builder
193
194import 'dart:ui';
195import 'package:anime_shows/ui/widgets/Banner.dart';
196import 'package:anime_shows/utils/properties/no_glow.dart';
197import 'package:anime_shows/utils/serviecs/get_show.dart';
198import 'package:carousel_slider/carousel_slider.dart';
199import 'package:flutter/material.dart';
200import 'package:provider/provider.dart';
201
202class HomeScreen extends StatelessWidget {
203 @override
204 Widget build(BuildContext context) {
205 final showp = Provider.of<ShowProvider>(context);
206 return SafeArea(
207 child: Scaffold(
208 backgroundColor: Color(0xff232020),
209 appBar: AppBar(
210 centerTitle: true,
211 backgroundColor: Colors.black,
212 title: Text('App Name'),
213 ),
214 body: Container(
215 width: double.infinity,
216 padding: EdgeInsets.symmetric(vertical: 10),
217 child: ScrollConfiguration(
218 behavior: NoGlowBehavior(),
219 child: ListView(
220 scrollDirection: Axis.vertical,
221 shrinkWrap: true,
222 children: [
223 Container(
224 height: 200,
225 child: ListView.builder(
226 itemCount: showp.shows.length,
227 shrinkWrap: true,
228 itemBuilder: (BuildContext context, int index) {
229 return showp.shows[index].banner == true ? NewWidget() : null;
230 },
231 ),
232 ),
233
234
235 ],
236 ),
237 ),
238 ),
239 ),
240 );
241 }
242}
243
244
245
246//rest api
247[
248 {
249 "id": 1,
250 "ShowTitle": "One Punch Man",
251 "ShowImage": "https://i.ibb.co/zXVWKkk/V-Monster-Musume-no-Oishasan-full-3097933.png",
252 "BannerImage": "https://i.ibb.co/7X9Sw1V/533007.png",
253 "ShowTrailer": "https://www.youtube.com/watch?v=2JAElThbKrI",
254 "Banner": false,
255 "Popular": true,
256 "Complete": false,
257 "OnGoing": true,
258 "Audio": {
259 "language": "Hindi"
260 },
261 "Genre": [
262 {
263 "genres": "Action"
264 },
265 {
266 "genres": "Comedy"
267 },
268 {
269 "genres": "Crime"
270 }
271 ],
272 "SubTitle": {
273 "subTitle": "English"
274 },
275 "ShowDesc": "One Punch Man One Punch Man One Punch Man One Punch Man One Punch Man One Punch Man One Punch Man One Punch Man One Punch Man One Punch Man",
276 "season": [
277 {
278 "SeasonTitle": "Season 1",
279 "SeasonDesc": "One Punch Man One Punch Man",
280 "SeasonReleaseDate": "2021-02-03T15:35:23.212345Z",
281 "episode": [
282 {
283 "EpisodeTitle": "Episode-1",
284 "EpisodeDesc": "One Punch Man One Punch Man One Punch Man",
285 "EpisodeLink": "https://www.youtube.com/watch?v=awUKDn4qwko&list=PLwLSw1_eDZl3LmQOuDIveKBPJvUcapoq5&index=2",
286 "EpisodeReleaseDate": "2021-02-03T15:37:54.085367Z"
287 },
288 {
289 "EpisodeTitle": "Episode-2",
290 "EpisodeDesc": "One Punch Man One Punch Man",
291 "EpisodeLink": "https://www.youtube.com/watch?v=QMmoSstF9js&list=PLwLSw1_eDZl3LmQOuDIveKBPJvUcapoq5&index=1&t=16s",
292 "EpisodeReleaseDate": "2021-02-03T15:38:07.659723Z"
293 }
294 ]
295 },
296 {
297 "SeasonTitle": "Season 2",
298 "SeasonDesc": "One Punch Man One Punch Man",
299 "SeasonReleaseDate": "2021-02-03T15:35:31.170402Z",
300 "episode": [
301 {
302 "EpisodeTitle": "Episode-1",
303 "EpisodeDesc": "One Punch Man One Punch Man One Punch Man",
304 "EpisodeLink": "https://www.youtube.com/watch?v=QMmoSstF9js&list=PLwLSw1_eDZl3LmQOuDIveKBPJvUcapoq5&index=1&t=16s",
305 "EpisodeReleaseDate": "2021-02-03T15:38:17.460402Z"
306 }
307 ]
308 }
309 ]
310 },
311 {
312 "id": 2,
313 "ShowTitle": "Attack On Titne",
314 "ShowImage": "https://i.ibb.co/zXVWKkk/V-Monster-Musume-no-Oishasan-full-3097933.png",
315 "BannerImage": "https://i.ibb.co/7X9Sw1V/533007.png",
316 "ShowTrailer": "https://www.youtube.com/watch?v=2JAElThbKrI",
317 "Banner": true,
318 "Popular": false,
319 "Complete": false,
320 "OnGoing": true,
321 "Audio": {
322 "language": "English"
323 },
324 "Genre": [
325 {
326 "genres": "Action"
327 },
328 {
329 "genres": "Comedy"
330 },
331 {
332 "genres": "Slice of Life"
333 },
334 {
335 "genres": "Drama"
336 }
337 ],
338 "SubTitle": {
339 "subTitle": "Hindi"
340 },
341 "ShowDesc": "One Punch Man One Punch Man One Punch Man One Punch Man One Punch Man One Punch Man",
342 "season": [
343 {
344 "SeasonTitle": "Season 1",
345 "SeasonDesc": "Attack on Titan Attack on Titan",
346 "SeasonReleaseDate": "2021-02-03T15:35:50.874510Z",
347 "episode": [
348 {
349 "EpisodeTitle": "Episode-1",
350 "EpisodeDesc": "Attack on Titan Attack on Titan",
351 "EpisodeLink": "https://www.youtube.com/watch?v=QMmoSstF9js&list=PLwLSw1_eDZl3LmQOuDIveKBPJvUcapoq5&index=1&t=16s",
352 "EpisodeReleaseDate": "2021-02-03T15:36:16.907832Z"
353 },
354 {
355 "EpisodeTitle": "Episode-2",
356 "EpisodeDesc": "Attack on Titan Attack on Titan Attack on Titan",
357 "EpisodeLink": "https://www.youtube.com/watch?v=QMmoSstF9js&list=PLwLSw1_eDZl3LmQOuDIveKBPJvUcapoq5&index=1&t=16s",
358 "EpisodeReleaseDate": "2021-02-03T15:36:26.869164Z"
359 },
360 {
361 "EpisodeTitle": "Episode-3",
362 "EpisodeDesc": "Attack on Titan Attack on Titan Attack on Titan Attack on Titan",
363 "EpisodeLink": "https://www.youtube.com/watch?v=QMmoSstF9js&list=PLwLSw1_eDZl3LmQOuDIveKBPJvUcapoq5&index=1&t=16s",
364 "EpisodeReleaseDate": "2021-02-03T15:36:37.781293Z"
365 },
366 {
367 "EpisodeTitle": "Episode-4",
368 "EpisodeDesc": "Attack on Titan Attack on Titan Attack on Titan Attack on Titan",
369 "EpisodeLink": "https://www.youtube.com/watch?v=QMmoSstF9js&list=PLwLSw1_eDZl3LmQOuDIveKBPJvUcapoq5&index=1&t=16s",
370 "EpisodeReleaseDate": "2021-02-03T15:37:06.822465Z"
371 }
372 ]
373 }
374 ]
375 },
376 {
377 "id": 3,
378 "ShowTitle": "Death Note",
379 "ShowImage": "https://i.ibb.co/zXVWKkk/V-Monster-Musume-no-Oishasan-full-3097933.png",
380 "BannerImage": "https://i.ibb.co/gwR1dtS/H-monster-musume-no-oisha-san.jpg",
381 "ShowTrailer": "https://www.youtube.com/watch?v=2JAElThbKrI",
382 "Banner": false,
383 "Popular": true,
384 "Complete": true,
385 "OnGoing": false,
386 "Audio": {
387 "language": "Hindi"
388 },
389 "Genre": [
390 {
391 "genres": "Action"
392 },
393 {
394 "genres": "Supernatural"
395 }
396 ],
397 "SubTitle": {
398 "subTitle": "Hindi"
399 },
400 "ShowDesc": "Death Note Death Note Death Note Death Note Death Note Death Note",
401 "season": []
402 },
403 {
404 "id": 4,
405 "ShowTitle": "One Punch Man 2",
406 "ShowImage": "https://i.ibb.co/fxJcmQ6/Vertical.jpg",
407 "BannerImage": "https://i.ibb.co/7X9Sw1V/533007.png",
408 "ShowTrailer": "https://www.youtube.com/watch?v=2JAElThbKrI",
409 "Banner": true,
410 "Popular": false,
411 "Complete": false,
412 "OnGoing": true,
413 "Audio": {
414 "language": "English"
415 },
416 "Genre": [
417 {
418 "genres": "Action"
419 }
420 ],
421 "SubTitle": {
422 "subTitle": "English"
423 },
424 "ShowDesc": "One Punch Man 2",
425 "season": []
426 },
427 {
428 "id": 5,
429 "ShowTitle": "Monster Girl Doctor",
430 "ShowImage": "https://i.ibb.co/zXVWKkk/V-Monster-Musume-no-Oishasan-full-3097933.png",
431 "BannerImage": "https://i.ibb.co/gwR1dtS/H-monster-musume-no-oisha-san.jpg",
432 "ShowTrailer": "https://www.youtube.com/watch?v=2JAElThbKrI",
433 "Banner": true,
434 "Popular": false,
435 "Complete": false,
436 "OnGoing": false,
437 "Audio": {
438 "language": "English"
439 },
440 "Genre": [
441 {
442 "genres": "Comedy"
443 },
444 {
445 "genres": "Crime"
446 }
447 ],
448 "SubTitle": {
449 "subTitle": "English"
450 },
451 "ShowDesc": "svdrg",
452 "season": []
453 }
454]