Untitled

mail@pastecode.io avatar
unknown
dart
3 years ago
6.2 kB
25
Indexable
Never
# 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),
          ],
        ),
      ),
    );
  }
}