Untitled
unknown
dart
5 years ago
6.2 kB
30
Indexable
# Model Class
class Shows {
final String ShowTitle;
final String BannerImage;
final String ShowImage;
bool Popular;
bool OnGoing;
Shows({
this.ShowTitle,
this.BannerImage,
this.ShowImage,
this.Popular,
this.OnGoing,
});
factory Shows.fromJson(Map<String, dynamic> json) {
return Shows(
ShowTitle: json['ShowTitle'],
BannerImage: json['BannerImage'],
ShowImage: json['ShowImage'],
Popular: json['Popular'],
OnGoing: json['OnGoing'],
);
}
}
# Api
import 'dart:convert';
import 'package:anime_frontend/utils/models/shows.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
class ShowsProvider with ChangeNotifier {
ShowsProvider() {
this.fetchTask();
}
List<Shows> _shows = [];
List<Shows> get shows {
return [..._shows];
}
fetchTask() async {
final url = 'https://newstreamly.herokuapp.com/api/show/';
final response = await http.get(url);
if (response.statusCode == 200) {
var data = json.decode(response.body) as List;
_shows = data.map<Shows>((json) => Shows.fromJson(json)).toList();
// notifyListeners();
// ChangeNotifier();
}
}
}
# Main class
import 'package:anime_frontend/ui/core.dart';
import 'package:anime_frontend/utils/apis/shows.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (BuildContext context) => ShowsProvider(),
child: MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: Core(),
),
);
}
}
# Page class
import 'package:anime_frontend/ui/widgets/show_card.dart';
import 'package:anime_frontend/ui/widgets/show_popular.dart';
import 'package:carousel_slider/carousel_slider.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:anime_frontend/ui/constant/colors.dart';
import 'package:anime_frontend/ui/constant/teststyle.dart';
import 'package:anime_frontend/ui/widgets/banner.dart';
import 'package:anime_frontend/utils/apis/shows.dart';
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final showP = Provider.of<ShowsProvider>(context);
return Scaffold(
backgroundColor: kBackgroundColor,
body: Container(
margin: EdgeInsets.symmetric(horizontal: 10),
child: ListView(
scrollDirection: Axis.vertical,
children: [
Container(
height: 50,
child: Center(
child: Text(
'Explore',
style: kAppbarTextStyle,
textAlign: TextAlign.center,
),
),
),
SizedBox(height: 5),
CarouselSlider(
options: CarouselOptions(
viewportFraction: .95,
autoPlay: true,
),
items: <Widget>[
for (var index = 0; index < showP.shows.length; index++)
AnimeBanner(
imageUrl: showP.shows[index].BannerImage,
showTitle: showP.shows[index].ShowTitle,
)
],
),
SizedBox(height: 5),
Text(
'Popular Anime',
style: kTitleTextStyle,
),
SizedBox(height: 10),
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
for (var index = 0; index < showP.shows.length; index++)
if (showP.shows[index].Popular = true)
AnimeItem(
imageUrl: showP.shows[index].BannerImage,
showTitle: showP.shows[index].ShowTitle,
),
],
),
),
SizedBox(height: 5),
Text(
'onGoing Anime',
style: kTitleTextStyle,
),
SizedBox(height: 10),
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
for (var index = 0; index < showP.shows.length; index++)
if (showP.shows[index].OnGoing = true)
// ChangeNotifier()
AnimeItem(
imageUrl: showP.shows[index].BannerImage,
showTitle: showP.shows[index].ShowTitle,
),
],
),
),
SizedBox(height: 10),
Container(
padding: EdgeInsets.all(5),
child: Text(
'Made For You',
style: kTitleTextStyle,
),
),
SizedBox(height: 10),
CarouselSlider(
options: CarouselOptions(
height: 300,
viewportFraction: .7,
enlargeCenterPage: true,
autoPlay: true,
autoPlayCurve: Curves.easeInOut,
),
items: [
for (var index = 0; index < showP.shows.length; index++)
AnimePopular(
imageUrl: showP.shows[index].BannerImage,
showTitle: showP.shows[index].ShowTitle,
),
],
),
SizedBox(height: 10),
],
),
),
);
}
}
Editor is loading...