Created
April 11, 2023 06:57
-
-
Save dilshod1d/9edafda11d1507769da5976b454bda13 to your computer and use it in GitHub Desktop.
Homepage 2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import 'dart:convert'; | |
| import 'dart:ui'; | |
| import 'package:StreamFlix/model/video.dart'; | |
| import 'package:StreamFlix/pages/Seeall.dart'; | |
| import 'package:StreamFlix/pages/profile.dart'; | |
| import 'package:StreamFlix/pages/root_app.dart'; | |
| import 'package:StreamFlix/pages/search_page.dart'; | |
| import 'package:StreamFlix/pages/video_details_bottom.dart'; | |
| import 'package:StreamFlix/utils/local_storage.dart'; | |
| import 'package:cached_network_image/cached_network_image.dart'; | |
| import 'package:firebase_auth/firebase_auth.dart'; | |
| import 'package:flutter/material.dart'; | |
| import 'package:StreamFlix/json/home_json.dart'; | |
| import 'package:StreamFlix/pages/video_detail_page.dart'; | |
| import 'package:flutter/services.dart'; | |
| import 'package:flutter_bloc/flutter_bloc.dart'; | |
| import 'package:fluttertoast/fluttertoast.dart'; | |
| import 'package:http/http.dart' as http; | |
| import 'package:remixicon/remixicon.dart'; | |
| import 'package:shimmer/shimmer.dart'; | |
| import '../bloc/continue_watching/continue_watching_bloc.dart'; | |
| import '../widgets/new_and_hot_tile_action.dart'; | |
| import 'continue_watching.dart'; | |
| import 'home_movie.dart'; | |
| import 'movie_detail_page.dart'; | |
| class HomePage2 extends StatefulWidget { | |
| // HomePage2({key, this.openGenre}); | |
| // final Function() openGenre; | |
| @override | |
| _HomePage2State createState() => _HomePage2State(); | |
| } | |
| class _HomePage2State extends State<HomePage2> { | |
| final _scrollController = ScrollController(); | |
| List<Video> _videos = []; | |
| var firebaseUser = FirebaseAuth.instance.currentUser; | |
| Future parseProducts(String responseBody) async { | |
| final parsed = json.decode(responseBody).cast<Map<String, dynamic>>(); | |
| video = parsed.map<Video>((json) => Video.fromJson(json)).toList(); | |
| final movieInMyListLocal = await LocalStorage.getListMoviesInMyList(); | |
| if (movieInMyListLocal.isNotEmpty) { | |
| for (var key in movieInMyListLocal.keys) { | |
| final videoModel = Video.fromJson(movieInMyListLocal[key]); | |
| if (video.every((element) => element.name != videoModel.name)) { | |
| video.add(videoModel); | |
| } | |
| } | |
| } | |
| // video.shuffle(); | |
| setState(() {}); | |
| } | |
| void parsepopularbollywoodcrime(String responseBody) { | |
| final parsed = json.decode(responseBody).cast<Map<String, dynamic>>(); | |
| setState(() { | |
| popularbollywoodcrime = | |
| parsed.map<Video>((json) => Video.fromJson(json)).toList(); | |
| // popularbollywoodcrime.shuffle(); | |
| popularbollywoodcrime = popularbollywoodcrime | |
| .where((element) => element.series == "yes") | |
| .toList(); | |
| // popularbollywoodcrime.shuffle(); | |
| }); | |
| } | |
| void parsepopular(String responseBody) { | |
| final parsed = json.decode(responseBody).cast<Map<String, dynamic>>(); | |
| setState(() { | |
| popular = parsed.map<Video>((json) => Video.fromJson(json)).toList(); | |
| // popular.shuffle(); | |
| popular = popular.where((element) => element.series == "yes").toList(); | |
| // popular.shuffle(); | |
| }); | |
| } | |
| void parsekorean(String responseBody) { | |
| final parsed = json.decode(responseBody).cast<Map<String, dynamic>>(); | |
| setState(() { | |
| korean = parsed.map<Video>((json) => Video.fromJson(json)).toList(); | |
| // korean.shuffle(); | |
| korean = korean.where((element) => element.series == "yes").toList(); | |
| // korean.shuffle(); | |
| }); | |
| } | |
| void parsetrending(String responseBody) { | |
| final parsed = json.decode(responseBody).cast<Map<String, dynamic>>(); | |
| setState(() { | |
| trending = parsed.map<Video>((json) => Video.fromJson(json)).toList(); | |
| // trending.shuffle(); | |
| trending = trending.where((element) => element.series == "yes").toList(); | |
| // trending.shuffle(); | |
| }); | |
| } | |
| String tokenlink; | |
| List<Token> _postList = new List<Token>(); | |
| void parsetoken(String responseBody) { | |
| final parsed = json.decode(responseBody).cast<Map<String, dynamic>>(); | |
| setState(() { | |
| token = parsed.map<Token>((json) => Token.fromJson(json)).toList(); | |
| }); | |
| List<dynamic> values = new List<dynamic>(); | |
| values = json.decode(responseBody); | |
| if (values.length > 0) { | |
| for (int i = 0; i < values.length; i++) { | |
| if (values[i] != null) { | |
| Map<String, dynamic> map = values[i]; | |
| _postList.add(Token.fromJson(map)); | |
| tokenlink = map["token"]; | |
| } | |
| } | |
| } | |
| } | |
| String azurelink; | |
| List<Azure> azurelist = new List<Azure>(); | |
| void parseazure(String responseBody) { | |
| final parsed = json.decode(responseBody).cast<Map<String, dynamic>>(); | |
| setState(() { | |
| link = parsed.map<Azure>((json) => Azure.fromJson(json)).toList(); | |
| }); | |
| List<dynamic> values = new List<dynamic>(); | |
| values = json.decode(responseBody); | |
| if (values.length > 0) { | |
| for (int i = 0; i < values.length; i++) { | |
| if (values[i] != null) { | |
| Map<String, dynamic> map = values[i]; | |
| azurelist.add(Azure.fromJson(map)); | |
| azurelink = map["link"]; | |
| } | |
| } | |
| } | |
| } | |
| Future<void> fetchazure() async { | |
| try { | |
| final responsetoken = await http.get(azureurl); | |
| if (responsetoken.statusCode == 200) { | |
| parseazure(responsetoken.body); | |
| } | |
| } catch (e) { | |
| print(e.toString()); | |
| } | |
| } | |
| List<Azure> link = []; | |
| List<Video> video = []; | |
| List<Seriess> seriess = []; | |
| List<Token> token = []; | |
| List<Video> korean = []; | |
| List<Video> popular = []; | |
| List<Video> trending = []; | |
| List<Video> south = []; | |
| List<Video> complete = []; | |
| List<Video> scifi = []; | |
| List<Video> action = []; | |
| List<Video> popularbollywoodcrime = []; | |
| List<Video> horror = []; | |
| List<Video> romantic = []; | |
| var url = Uri.parse( | |
| "https://streamflix.azureedge.net/streamapi/api-main/streamflix/stream"); | |
| var tokenurl = Uri.parse( | |
| "https://streamflix.azureedge.net/streamapi/api-main/streamflix/blob"); | |
| var azureurl = Uri.parse( | |
| "https://streamflix.azureedge.net/streamapi/api-main/streamflix/azure"); | |
| var urlpopular = Uri.parse( | |
| "https://streamflix.azureedge.net/streamapi/api-main/streamflix/popularseries"); | |
| var koreanlink = Uri.parse( | |
| "https://streamflix.azureedge.net/streamapi/api-main/streamflix/korean"); | |
| var urltrending = Uri.parse( | |
| "https://streamflix.azureedge.net/streamapi/api-main/streamflix/trending"); | |
| var urlpopularbollywoodcrime = Uri.parse( | |
| "https://streamflix.azureedge.net/streamapi/api-main/streamflix/popularbollywoodcrime"); | |
| var urlcomplete = Uri.parse( | |
| "https://streamflix.azureedge.net/streamapi/api-main/streamflix/main"); | |
| List<Video> newreleases = []; | |
| List<Video> punjabi = []; | |
| List<Video> ustvshows = []; | |
| List<Video> anime = []; | |
| List<Video> adventure = []; | |
| var urlanime = Uri.parse( | |
| "https://streamflix.azureedge.net/streamapi/api-main/streamflix/anime"); | |
| var urlustvshows = Uri.parse( | |
| "https://streamflix.azureedge.net/streamapi/api-main/streamflix/ustvshows"); | |
| var urlnewreleases = Uri.parse( | |
| "https://streamflix.azureedge.net/streamapi/api-main/streamflix/newreleases"); | |
| var urlpunjabi = Uri.parse( | |
| "https://streamflix.azureedge.net/streamapi/api-main/streamflix/punjabidrama"); | |
| Future<void> fetchanime() async { | |
| final response = await http.get(urlanime); | |
| if (response.statusCode == 200) { | |
| parseanime(response.body); | |
| } else { | |
| throw Exception('Unable to fetch products from the REST API'); | |
| } | |
| } | |
| Future<void> fetchustvshows() async { | |
| final response = await http.get(urlustvshows); | |
| if (response.statusCode == 200) { | |
| parseustvshows(response.body); | |
| } else { | |
| throw Exception('Unable to fetch products from the REST API'); | |
| } | |
| } | |
| Future<void> fetchnewreleases() async { | |
| final response = await http.get(urlnewreleases); | |
| if (response.statusCode == 200) { | |
| parsenewreleases(response.body); | |
| } else { | |
| throw Exception('Unable to fetch products from the REST API'); | |
| } | |
| } | |
| Future<void> fetchpunjabi() async { | |
| final response = await http.get(urlpunjabi); | |
| if (response.statusCode == 200) { | |
| parsepunjabi(response.body); | |
| } else { | |
| throw Exception('Unable to fetch products from the REST API'); | |
| } | |
| } | |
| void parseanime(String responseBody) { | |
| final parsed = json.decode(responseBody).cast<Map<String, dynamic>>(); | |
| setState(() { | |
| anime = parsed.map<Video>((json) => Video.fromJson(json)).toList(); | |
| anime = anime.where((element) => element.series == "yes").toList(); | |
| // anime.shuffle(); | |
| }); | |
| } | |
| void parseustvshows(String responseBody) { | |
| final parsed = json.decode(responseBody).cast<Map<String, dynamic>>(); | |
| setState(() { | |
| ustvshows = parsed.map<Video>((json) => Video.fromJson(json)).toList(); | |
| ustvshows = | |
| ustvshows.where((element) => element.series == "yes").toList(); | |
| // ustvshows.shuffle(); | |
| }); | |
| } | |
| void parsenewreleases(String responseBody) { | |
| final parsed = json.decode(responseBody).cast<Map<String, dynamic>>(); | |
| setState(() { | |
| newreleases = parsed.map<Video>((json) => Video.fromJson(json)).toList(); | |
| newreleases = | |
| newreleases.where((element) => element.series == "yes").toList(); | |
| // newreleases.shuffle(); | |
| }); | |
| } | |
| void parsepunjabi(String responseBody) { | |
| final parsed = json.decode(responseBody).cast<Map<String, dynamic>>(); | |
| setState(() { | |
| punjabi = parsed.map<Video>((json) => Video.fromJson(json)).toList(); | |
| punjabi = punjabi.where((element) => element.series == "yes").toList(); | |
| // punjabi.shuffle(); | |
| }); | |
| } | |
| void parsecomplete(String responseBody) { | |
| final parsed = json.decode(responseBody).cast<Map<String, dynamic>>(); | |
| setState(() { | |
| complete = parsed.map<Video>((json) => Video.fromJson(json)).toList(); | |
| complete = | |
| complete.where((element) => element.series == "yes").toSet().toList(); | |
| complete.shuffle(); | |
| scifi = parsed.map<Video>((json) => Video.fromJson(json)).toList(); | |
| scifi = scifi | |
| .where((element) => element.genres.contains("Si-Fi")) | |
| .toSet() | |
| .toList(); | |
| scifi = scifi.where((element) => element.series == "yes").toList(); | |
| action = parsed.map<Video>((json) => Video.fromJson(json)).toList(); | |
| action = | |
| action.where((element) => element.genres.contains("Action")).toList(); | |
| action = | |
| action.where((element) => element.series == "yes").toSet().toList(); | |
| action.shuffle(); | |
| adventure = parsed.map<Video>((json) => Video.fromJson(json)).toList(); | |
| adventure = adventure | |
| .where((element) => element.genres.contains("Adventure")) | |
| .toList(); | |
| adventure = adventure | |
| .where((element) => element.series == "yes") | |
| .toSet() | |
| .toList(); | |
| adventure.shuffle(); | |
| horror = parsed.map<Video>((json) => Video.fromJson(json)).toList(); | |
| horror = | |
| horror.where((element) => element.genres.contains("Horror")).toList(); | |
| horror = | |
| horror.where((element) => element.series == "yes").toSet().toList(); | |
| horror.shuffle(); | |
| romantic = parsed.map<Video>((json) => Video.fromJson(json)).toList(); | |
| romantic = romantic | |
| .where((element) => element.genres.contains("Romance")) | |
| .toList(); | |
| romantic = | |
| romantic.where((element) => element.series == "yes").toSet().toList(); | |
| horror.shuffle(); | |
| }); | |
| } | |
| void parsesouth(String responseBody) { | |
| final parsed = json.decode(responseBody).cast<Map<String, dynamic>>(); | |
| setState(() { | |
| south = parsed.map<Video>((json) => Video.fromJson(json)).toList(); | |
| south = south.where((element) => element.series == "yes").toList(); | |
| south = | |
| south.where((element) => element.genres.contains("South")).toList(); | |
| }); | |
| } | |
| Future<void> fetchsouth() async { | |
| final response = await http.get(urlcomplete); | |
| if (response.statusCode == 200) { | |
| parsesouth(response.body); | |
| } else { | |
| throw Exception('Unable to fetch products from the REST API'); | |
| } | |
| } | |
| Future<void> fetchcomplete() async { | |
| final response = await http.get(urlcomplete); | |
| if (response.statusCode == 200) { | |
| parsecomplete(response.body); | |
| } else { | |
| throw Exception('Unable to fetch products from the REST API'); | |
| } | |
| } | |
| Future<void> fetchProducts() async { | |
| try { | |
| final response = await http.get(url); | |
| if (response.statusCode == 200) { | |
| await parseProducts(response.body); | |
| } | |
| } catch (e) { | |
| print(e.toString()); | |
| } | |
| } | |
| Future<void> fetchtrending() async { | |
| try { | |
| final response = await http.get(urltrending); | |
| if (response.statusCode == 200) { | |
| parsetrending(response.body); | |
| } | |
| } catch (e) { | |
| print(e.toString()); | |
| } | |
| } | |
| Future<void> fetchtoken() async { | |
| try { | |
| final responsetoken = await http.get(tokenurl); | |
| if (responsetoken.statusCode == 200) { | |
| parsetoken(responsetoken.body); | |
| } | |
| } catch (e) { | |
| print(e.toString()); | |
| } | |
| } | |
| Future<void> popularlist() async { | |
| final response = await http.get(urlpopular); | |
| if (response.statusCode == 200) { | |
| parsepopular(response.body); | |
| } else { | |
| throw Exception('Unable to fetch products from the REST API'); | |
| } | |
| } | |
| Future<void> koreanlist() async { | |
| final response = await http.get(koreanlink); | |
| if (response.statusCode == 200) { | |
| parsekorean(response.body); | |
| } else { | |
| throw Exception('Unable to fetch products from the REST API'); | |
| } | |
| } | |
| Future<void> popularbollywoodcrimelist() async { | |
| final response = await http.get(urlpopularbollywoodcrime); | |
| if (response.statusCode == 200) { | |
| parsepopularbollywoodcrime(response.body); | |
| } else { | |
| throw Exception('Unable to fetch products from the REST API'); | |
| } | |
| } | |
| TabController _tabController; | |
| Future<bool> _onWillPop() async { | |
| print("on will pop"); | |
| if (_tabController.index == 0) { | |
| await SystemNavigator.pop(); | |
| } | |
| Future.delayed(Duration(milliseconds: 200), () { | |
| print("set index"); | |
| _tabController.index = 0; | |
| }); | |
| print("return"); | |
| Navigator.push(context, MaterialPageRoute(builder: (context) => RootApp())); | |
| return _tabController.index == 0; | |
| } | |
| final _scrollController = ScrollController(); | |
| double _scrollOffset = 0; | |
| int page = 1; | |
| final _scrollControllerGenre = ScrollController(); | |
| @override | |
| void initState() { | |
| super.initState(); | |
| fetchProducts(); | |
| fetchtoken(); | |
| popularlist(); | |
| popularbollywoodcrimelist(); | |
| koreanlist(); | |
| fetchcomplete(); | |
| fetchazure(); | |
| fetchtrending(); | |
| fetchustvshows(); | |
| fetchnewreleases(); | |
| fetchanime(); | |
| fetchsouth(); | |
| fetchpunjabi(); | |
| BlocProvider.of<ContinueWatchingBloc>(context) | |
| .add(GetListContinueWatching()); | |
| _scrollController.addListener(_onScroll); | |
| _scrollControllerGenre.addListener(_onScrollGenre); | |
| } | |
| void _onScroll() { | |
| setState(() { | |
| if (_scrollController.offset <= 140) { | |
| _scrollOffset = _scrollController.offset; | |
| } else { | |
| _scrollOffset = 140; | |
| } | |
| }); | |
| } | |
| void _onScrollGenre() { | |
| setState(() { | |
| if (_scrollControllerGenre.offset <= 140) { | |
| _scrollOffset = _scrollControllerGenre.offset; | |
| } else { | |
| _scrollOffset = 140; | |
| } | |
| }); | |
| if (_scrollControllerGenre.position.atEdge && | |
| _scrollControllerGenre.offset != 0) { | |
| setState(() { | |
| page++; | |
| }); | |
| } | |
| } | |
| bool _isShowGenre = false; | |
| double _opacity = 0; | |
| void _closeGenre() async { | |
| for (int i = 0; i < 5; i++) { | |
| await Future.delayed(const Duration(milliseconds: 25)); | |
| setState(() { | |
| _opacity -= 0.2; | |
| }); | |
| } | |
| setState(() { | |
| _isShowGenre = false; | |
| }); | |
| } | |
| void _openGenre() async { | |
| setState(() { | |
| _isShowGenre = true; | |
| }); | |
| for (int i = 0; i < 5; i++) { | |
| await Future.delayed(const Duration(milliseconds: 25)); | |
| setState(() { | |
| _opacity += 0.2; | |
| }); | |
| } | |
| } | |
| OverlayEntry overlay; | |
| bool seetvshow = true; | |
| MaterialColor kPrimaryColor = const MaterialColor( | |
| 0x00000000, | |
| const <int, Color>{ | |
| 50: const Color(0x00000000), | |
| 100: const Color(0x00000000), | |
| 200: const Color(0x00000000), | |
| 300: const Color(0x00000000), | |
| 400: const Color(0x00000000), | |
| 500: const Color(0x00000000), | |
| 600: const Color(0x00000000), | |
| 700: const Color(0x00000000), | |
| 800: const Color(0x00000000), | |
| 900: const Color(0x00000000), | |
| }, | |
| ); | |
| @override | |
| Widget build(BuildContext context) { | |
| return MaterialApp( | |
| themeMode: ThemeMode.dark, | |
| debugShowCheckedModeBanner: false, | |
| theme: ThemeData( | |
| textTheme: TextTheme( | |
| headline1: TextStyle(color: Colors.white), | |
| headline2: TextStyle(color: Colors.white), | |
| bodyText2: TextStyle(color: Colors.white), | |
| subtitle1: TextStyle(color: Colors.white), | |
| ), | |
| primarySwatch: kPrimaryColor, | |
| // add tabBarTheme | |
| ), | |
| home: WillPopScope( | |
| onWillPop: _onWillPop, | |
| child: AnnotatedRegion<SystemUiOverlayStyle>( | |
| value: SystemUiOverlayStyle( | |
| statusBarColor: Colors.transparent, | |
| ), | |
| child: (_isShowGenre) | |
| ? Scaffold( | |
| backgroundColor: Colors.transparent, | |
| body: BackdropFilter( | |
| filter: ImageFilter.blur( | |
| sigmaX: _opacity * 30, sigmaY: _opacity * 30), | |
| child: Opacity( | |
| opacity: _opacity, | |
| child: Stack( | |
| children: [ | |
| ListView.separated( | |
| padding: const EdgeInsets.fromLTRB(0, 50, 0, 100), | |
| separatorBuilder: (context, index) => | |
| const SizedBox(height: 35), | |
| itemCount: categorieslist.length, | |
| itemBuilder: (context, index) { | |
| return GestureDetector( | |
| onTap: () { | |
| Navigator.of(context, rootNavigator: true) | |
| .push(MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: | |
| "https://streamflix.azureedge.net/streamapi/api-main/streamflix/main", | |
| type: "category", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: categorieslist[index]["tag"]), | |
| )); | |
| _closeGenre(); | |
| }, | |
| child: Text( | |
| categorieslist[index]["tag"], | |
| textAlign: TextAlign.center, | |
| style: TextStyle( | |
| fontSize: 18, | |
| color: Colors.white.withOpacity(0.8)), | |
| ), | |
| ); | |
| }, | |
| ), | |
| Align( | |
| alignment: Alignment.bottomCenter, | |
| child: Container( | |
| margin: const EdgeInsets.only(bottom: 20), | |
| child: GestureDetector( | |
| onTap: _closeGenre, | |
| child: const Icon( | |
| Remix.close_circle_fill, | |
| size: 65, | |
| color: Colors.red, | |
| ))), | |
| ) | |
| ], | |
| ), | |
| ), | |
| ), | |
| ) | |
| : Scaffold( | |
| extendBody: true, | |
| extendBodyBehindAppBar: true, | |
| backgroundColor: Colors.black, | |
| resizeToAvoidBottomInset: false, | |
| body: Stack( | |
| children: [ | |
| // ignore: missing_return | |
| Builder(builder: (_) { | |
| if (seetvshow) { | |
| return getBody(); | |
| } | |
| if (!seetvshow) { | |
| return HomeMovie( | |
| scrollController: _scrollController, | |
| ); | |
| } | |
| }), | |
| Positioned( | |
| top: 0, | |
| left: 0, | |
| right: 0, | |
| child: ClipRect( | |
| child: BackdropFilter( | |
| filter: _scrollOffset >= 140 | |
| ? ImageFilter.blur(sigmaX: 10, sigmaY: 10) | |
| : ImageFilter.blur(sigmaX: 0, sigmaY: 0), | |
| child: Container( | |
| decoration: BoxDecoration( | |
| gradient: LinearGradient( | |
| begin: Alignment.topCenter, | |
| end: Alignment.bottomCenter, | |
| colors: [ | |
| _scrollOffset >= 140 | |
| ? Colors.black.withOpacity(0.7) | |
| : Colors.transparent, | |
| _scrollOffset >= 140 | |
| ? Colors.black.withOpacity(0.7) | |
| : Colors.black.withOpacity( | |
| _scrollOffset / 145), | |
| // Colors.transparent.withOpacity(_scrollOffset / 145) | |
| ])), | |
| width: double.infinity, | |
| padding: const EdgeInsets.only( | |
| left: 15, top: 40, bottom: 0, right: 25), | |
| child: Column( | |
| children: [ | |
| Row( | |
| children: [ | |
| Image.asset( | |
| 'assets/images/logo.png', | |
| height: 38.0, | |
| width: 40, | |
| ), | |
| const Spacer(), | |
| InkWell( | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push(MaterialPageRoute( | |
| builder: (context) => | |
| SearchPage())); | |
| }, | |
| child: Icon(Icons.search, | |
| color: Colors.white), | |
| ), | |
| const SizedBox( | |
| width: 15, | |
| ), | |
| GestureDetector( | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push(MaterialPageRoute( | |
| builder: (context) => | |
| Profile())); | |
| }, | |
| child: CircleAvatar( | |
| radius: 15.0, | |
| backgroundImage: NetworkImage( | |
| firebaseUser?.photoURL == null | |
| ? "https://i.ibb.co/VHv69j4/Clipart-Key-1414123.png" | |
| : firebaseUser.photoURL), | |
| backgroundColor: | |
| Colors.transparent, | |
| ), | |
| ), | |
| ], | |
| ), | |
| SizedBox( | |
| height: 60 - (40 * _scrollOffset / 140), | |
| child: Padding( | |
| padding: const EdgeInsets.only( | |
| left: 20, | |
| right: 20, | |
| bottom: 20, | |
| top: 20), | |
| child: Row( | |
| mainAxisAlignment: | |
| MainAxisAlignment.spaceBetween, | |
| children: [ | |
| InkWell( | |
| onTap: () { | |
| setState(() { | |
| seetvshow = true; | |
| }); | |
| }, | |
| child: Row( | |
| children: [ | |
| (seetvshow) | |
| ? Text( | |
| "TV Shows", | |
| style: TextStyle( | |
| fontStyle: | |
| FontStyle | |
| .normal, | |
| color: Colors | |
| .white, | |
| fontWeight: | |
| FontWeight | |
| .bold), | |
| ) | |
| : Text("TV Shows"), | |
| ], | |
| ), | |
| ), | |
| InkWell( | |
| onTap: () { | |
| setState(() { | |
| seetvshow = false; | |
| }); | |
| }, | |
| child: Row( | |
| children: [ | |
| (!seetvshow) | |
| ? Text("Movies", | |
| style: TextStyle( | |
| fontStyle: | |
| FontStyle | |
| .normal, | |
| color: Colors | |
| .white, | |
| fontWeight: | |
| FontWeight | |
| .bold)) | |
| : Text("Movies"), | |
| ], | |
| ), | |
| ), | |
| InkWell( | |
| onTap: () { | |
| overlay = OverlayEntry( | |
| builder: (context) { | |
| return MaterialApp( | |
| theme: ThemeData( | |
| primarySwatch: | |
| kPrimaryColor, | |
| ), | |
| home: WillPopScope( | |
| onWillPop: () async { | |
| overlay.remove(); | |
| return true; | |
| }, | |
| child: Scaffold( | |
| backgroundColor: | |
| Colors.black | |
| .withOpacity( | |
| .9), | |
| body: Center( | |
| child: ListView | |
| .builder( | |
| itemCount: | |
| categorieslist | |
| .length, | |
| shrinkWrap: | |
| true, | |
| itemBuilder: | |
| ((context, | |
| index) { | |
| var season = | |
| index + 1; | |
| return Padding( | |
| padding: const EdgeInsets | |
| .symmetric( | |
| horizontal: | |
| 48.0), | |
| child: | |
| InkWell( | |
| child: | |
| Padding( | |
| padding: | |
| const EdgeInsets.all(16.0), | |
| child: | |
| Text( | |
| categorieslist[index] | |
| [ | |
| "tag"], | |
| style: const TextStyle( | |
| color: Colors.grey, | |
| fontSize: 18.0), | |
| textAlign: | |
| TextAlign.center, | |
| ), | |
| ), | |
| onTap: | |
| () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push(MaterialPageRoute( | |
| builder: (_) => | |
| Seeall( | |
| videoUrl: | |
| "https://streamflix.azureedge.net/streamapi/api-main/streamflix/main", | |
| type: | |
| "category", | |
| tokenLink: | |
| tokenlink, | |
| azurelink: | |
| azurelink, | |
| title: | |
| categorieslist[index]["tag"], | |
| video: | |
| video, | |
| ), | |
| )); | |
| overlay | |
| .remove(); | |
| }, | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| floatingActionButton: | |
| FloatingActionButton( | |
| backgroundColor: | |
| Colors | |
| .white, | |
| onPressed: | |
| () { | |
| overlay | |
| .remove(); | |
| }, | |
| child: | |
| const Icon( | |
| Icons | |
| .close, | |
| color: Colors | |
| .black, | |
| )), | |
| floatingActionButtonLocation: | |
| FloatingActionButtonLocation | |
| .centerDocked, | |
| ), | |
| ), | |
| ); | |
| }, | |
| ); | |
| Overlay.of(context, | |
| rootOverlay: true) | |
| ?.insert(overlay); | |
| }, | |
| child: Row( | |
| children: [ | |
| Text('Categories'), | |
| const SizedBox(width: 5), | |
| Opacity( | |
| opacity: 1 - | |
| (_scrollOffset / | |
| 140), | |
| child: Icon( | |
| Remix | |
| .arrow_down_s_line, | |
| color: Colors.white, | |
| )), | |
| ], | |
| ), | |
| ), | |
| ], | |
| ), | |
| ), | |
| ) | |
| ], | |
| )), | |
| ), | |
| )) | |
| ], | |
| ), | |
| ), | |
| ), | |
| ), | |
| ); | |
| } | |
| final shimmerGradient = LinearGradient( | |
| begin: Alignment.topLeft, | |
| end: Alignment.bottomRight, | |
| colors: <Color>[ | |
| Colors.grey[900], | |
| Colors.grey[900], | |
| Colors.grey[800], | |
| Colors.grey[900], | |
| Colors.grey[900] | |
| ], | |
| stops: const <double>[ | |
| 0.0, | |
| 0.35, | |
| 0.5, | |
| 0.65, | |
| 1.0 | |
| ]); | |
| Widget getBody() { | |
| var size = MediaQuery.of(context).size; | |
| final width = MediaQuery.of(context).size.width; | |
| return Padding( | |
| padding: const EdgeInsets.only(bottom: 0), | |
| child: SingleChildScrollView( | |
| controller: _scrollController, | |
| child: Stack(children: [ | |
| Container( | |
| width: size.height - 80, | |
| child: Column( | |
| crossAxisAlignment: CrossAxisAlignment.start, | |
| children: List.generate( | |
| complete.length < 1 ? complete.length : 1, | |
| (index) { | |
| return Column( | |
| crossAxisAlignment: CrossAxisAlignment.start, | |
| children: [ | |
| Stack( | |
| children: [ | |
| CachedNetworkImage( | |
| imageUrl: "${complete[index].image}".replaceAll( | |
| "_V1._SX350.jpg", "_V1._SX500.jpg"), | |
| imageBuilder: (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| child: Image( | |
| image: imageProvider, | |
| fit: BoxFit.fill, | |
| width: width, | |
| height: 540, | |
| ), | |
| ), | |
| placeholder: (context, url) => Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| decoration: BoxDecoration( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| color: Colors.black), | |
| width: width, | |
| height: 540), | |
| ), | |
| errorWidget: (context, url, error) => Container( | |
| width: 110.0, | |
| height: 220.0, | |
| decoration: BoxDecoration( | |
| borderRadius: BorderRadius.circular(8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| Container( | |
| height: 550, | |
| decoration: BoxDecoration( | |
| gradient: LinearGradient( | |
| colors: [ | |
| Colors.black, | |
| Colors.transparent, | |
| Colors.transparent, | |
| Colors.black54 | |
| ], | |
| begin: Alignment.bottomCenter, | |
| end: Alignment.topCenter, | |
| stops: [0, 0.6, 0.6, 1], | |
| ))), | |
| Container( | |
| height: 550, | |
| width: size.width, | |
| child: Column( | |
| mainAxisAlignment: MainAxisAlignment.end, | |
| crossAxisAlignment: CrossAxisAlignment.center, | |
| children: [ | |
| Divider( | |
| height: 15, | |
| color: Colors.black, | |
| ), | |
| Row( | |
| children: [ | |
| Expanded( | |
| child: Text( | |
| "${complete[index].genres}" | |
| .replaceAll(",", " • "), | |
| softWrap: false, | |
| maxLines: 2, | |
| textAlign: TextAlign.center, | |
| overflow: | |
| TextOverflow.ellipsis, // new | |
| ), | |
| ), | |
| ], | |
| ), | |
| ], | |
| ), | |
| ) | |
| ], | |
| ), | |
| Row( | |
| mainAxisAlignment: MainAxisAlignment.spaceEvenly, | |
| children: [ | |
| GestureDetector( | |
| onTap: () { | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: Colors.transparent, | |
| builder: (_) => ShowVideoDetailMini( | |
| isExistFromMyList: video.indexWhere( | |
| (element) => | |
| element.name == | |
| complete[index].name) != | |
| -1, | |
| onRemove: () async { | |
| video.removeAt(index); | |
| setState(() {}); | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[index].name); | |
| }, | |
| video: complete[index], | |
| onMyListTap: () async { | |
| video.insert(0, complete[index]); | |
| setState(() {}); | |
| await LocalStorage.addMovieToMyList( | |
| complete[index]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: GestureDetector( | |
| onTap: () async { | |
| final _index = video.indexWhere((element) => | |
| element.name == complete[index].name); | |
| if (_index != -1) { | |
| Fluttertoast.showToast( | |
| msg: "Removed from My List", // message | |
| toastLength: | |
| Toast.LENGTH_SHORT, // length | |
| gravity: | |
| ToastGravity.BOTTOM, // location | |
| timeInSecForIosWeb: 1 // duration | |
| ); | |
| await LocalStorage.removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| } else { | |
| Fluttertoast.showToast( | |
| msg: "Added to My List", // message | |
| toastLength: | |
| Toast.LENGTH_SHORT, // length | |
| gravity: | |
| ToastGravity.BOTTOM, // location | |
| timeInSecForIosWeb: 1 // duration | |
| ); | |
| video.insert(0, complete[index]); | |
| setState(() {}); | |
| await LocalStorage.addMovieToMyList( | |
| complete[index]); | |
| } | |
| }, | |
| child: NewAndHotTileAction( | |
| icon: video.indexWhere((element) => | |
| element.name == | |
| complete[index].name) != | |
| -1 | |
| ? Icons.check | |
| : Icons.add, | |
| label: video.indexWhere((element) => | |
| element.name == | |
| complete[index].name) != | |
| -1 | |
| ? "Added" | |
| : 'My List', | |
| ), | |
| ), | |
| ), | |
| ElevatedButton.icon( | |
| style: ElevatedButton.styleFrom( | |
| padding: const EdgeInsets.symmetric( | |
| horizontal: 12.0, vertical: 4.0), | |
| backgroundColor: Colors.white, | |
| foregroundColor: Colors.black), | |
| onPressed: () { | |
| final _index = video.indexWhere((element) => | |
| element.name == video[index].name); | |
| if (complete[index].series == "not") { | |
| Navigator.of(context, rootNavigator: true) | |
| .push(MaterialPageRoute( | |
| builder: (_) => MovieDetailPage( | |
| title: complete[index].name, | |
| description: | |
| complete[index].description, | |
| cast: complete[index].cast, | |
| video: complete[index].video, | |
| time: complete[index].time, | |
| trailer: | |
| complete[index].trailer, | |
| videoModel: complete[index], | |
| subtitle: | |
| complete[index].subtitle, | |
| isExistFromMyList: _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, complete[index]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| complete[index]); | |
| }, | |
| img: complete[index].image, | |
| token: tokenlink, | |
| azure: azurelink, | |
| age: complete[index].age, | |
| year: complete[index].date, | |
| genres: | |
| complete[index].genres))); | |
| } else { | |
| Navigator.of(context, rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => VideoDetailPage( | |
| title: complete[index].name, | |
| description: | |
| complete[index].description, | |
| cast: complete[index].cast, | |
| seriess: complete[index].seriess, | |
| //seriess: test.testList, | |
| img: complete[index].image, | |
| isExistFromMyList: _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| onMyListTap: () async { | |
| video.insert(0, complete[index]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| complete[index]); | |
| }, | |
| subtitle: complete[index].subtitle, | |
| token: tokenlink, | |
| azure: azurelink, | |
| trailer: complete[index].trailer, | |
| video: complete[index].video, | |
| age: complete[index].age, | |
| year: complete[index].date, | |
| genres: complete[index].genres), | |
| ), | |
| ); | |
| } | |
| }, | |
| icon: const Icon(Icons.play_arrow), | |
| label: const Text('Play')), | |
| GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere((element) => | |
| element.name == complete[index].name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: Colors.transparent, | |
| builder: (_) => ShowVideoDetailMini( | |
| isExistFromMyList: _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| onMyListTap: () async { | |
| video.insert(0, complete[index]); | |
| setState(() {}); | |
| await LocalStorage.addMovieToMyList( | |
| complete[index]); | |
| }, | |
| video: complete[index], | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: NewAndHotTileAction( | |
| icon: Icons.info_outline, | |
| label: 'Info', | |
| ), | |
| ), | |
| ], | |
| ), | |
| Divider( | |
| height: 30, | |
| color: Colors.black, | |
| ), | |
| BlocBuilder<ContinueWatchingBloc, | |
| ContinueWatchingState>(builder: (context, state) { | |
| if (state.listVideos.isNotEmpty) { | |
| return Column( | |
| crossAxisAlignment: CrossAxisAlignment.start, | |
| children: [ | |
| Padding( | |
| padding: const EdgeInsets.only( | |
| left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "Continue Watching", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: | |
| FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons | |
| .keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| int reversedIndex = | |
| state.listVideos.length - | |
| 1 - | |
| index; | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| state | |
| .listVideos[ | |
| reversedIndex] | |
| .name); | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: url.toString(), | |
| type: "Continue", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "Continue Watching", | |
| video: video, | |
| ), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ), | |
| SizedBox( | |
| height: 8, | |
| ), | |
| SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| padding: | |
| EdgeInsets.symmetric(horizontal: 10), | |
| child: Row( | |
| mainAxisSize: MainAxisSize.max, | |
| children: List.generate( | |
| state.listVideos.length, (index) { | |
| int reversedIndex = | |
| state.listVideos.length - 1 - index; | |
| state.listVideos.reversed.toList(); | |
| var videos = | |
| state.listVideos[reversedIndex]; | |
| return GestureDetector( | |
| onTap: () {}, | |
| child: Container( | |
| width: 110, | |
| height: 170, | |
| decoration: BoxDecoration( | |
| color: Colors.grey[900], | |
| borderRadius: | |
| BorderRadius.circular(5), | |
| ), | |
| margin: EdgeInsets.only(right: 8), | |
| child: Column( | |
| children: [ | |
| Expanded( | |
| child: GestureDetector( | |
| onTap: () { | |
| final _index = video | |
| .indexWhere((element) => | |
| element.name == | |
| state | |
| .listVideos[ | |
| reversedIndex] | |
| .name); | |
| if (state | |
| .listVideos[ | |
| reversedIndex] | |
| .series == | |
| "not") { | |
| Navigator.of(context, rootNavigator: true).push(MaterialPageRoute( | |
| builder: (_) => MovieDetailPage( | |
| videoModel: state.listVideos[reversedIndex], | |
| title: state.listVideos[reversedIndex].name, | |
| description: state.listVideos[reversedIndex].description, | |
| cast: state.listVideos[reversedIndex].cast, | |
| isExistFromMyList: _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index] | |
| .name); | |
| video.removeAt( | |
| _index); | |
| setState( | |
| () {}); | |
| }, | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, | |
| complete[ | |
| index]); | |
| setState( | |
| () {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| complete[ | |
| index]); | |
| }, | |
| video: state.listVideos[reversedIndex].video, | |
| trailer: state.listVideos[reversedIndex].trailer, | |
| subtitle: state.listVideos[reversedIndex].subtitle, | |
| img: state.listVideos[reversedIndex].image, | |
| time: state.listVideos[reversedIndex].time, | |
| token: tokenlink, | |
| azure: azurelink, | |
| age: state.listVideos[reversedIndex].age, | |
| year: state.listVideos[reversedIndex].date, | |
| genres: state.listVideos[reversedIndex].genres))); | |
| } else { | |
| Navigator.of(context, | |
| rootNavigator: | |
| true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => | |
| VideoDetailPage( | |
| videoModel: | |
| state.listVideos[ | |
| reversedIndex], | |
| title: state | |
| .listVideos[ | |
| reversedIndex] | |
| .name, | |
| description: state | |
| .listVideos[ | |
| reversedIndex] | |
| .description, | |
| cast: state | |
| .listVideos[ | |
| reversedIndex] | |
| .cast, | |
| isExistFromMyList: | |
| _index != | |
| -1, | |
| onRemove: | |
| () async { | |
| await LocalStorage.removeMovieFromMyList( | |
| video[_index] | |
| .name); | |
| video.removeAt( | |
| _index); | |
| setState( | |
| () {}); | |
| }, | |
| onMyListTap: | |
| () async { | |
| video.insert( | |
| 0, | |
| complete[ | |
| index]); | |
| setState( | |
| () {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| complete[index]); | |
| }, | |
| seriess: state | |
| .listVideos[ | |
| reversedIndex] | |
| .seriess, | |
| //seriess: test.testList, | |
| img: state | |
| .listVideos[ | |
| reversedIndex] | |
| .image, | |
| subtitle: state | |
| .listVideos[ | |
| reversedIndex] | |
| .subtitle, | |
| token: | |
| tokenlink, | |
| azure: | |
| azurelink, | |
| trailer: state | |
| .listVideos[reversedIndex] | |
| .trailer, | |
| video: state.listVideos[reversedIndex].video, | |
| age: state.listVideos[reversedIndex].age, | |
| year: state.listVideos[reversedIndex].date, | |
| genres: state.listVideos[reversedIndex].genres), | |
| ), | |
| ); | |
| } | |
| }, | |
| child: ClipRRect( | |
| borderRadius: | |
| BorderRadius.only( | |
| topRight: | |
| Radius.circular(5), | |
| topLeft: | |
| Radius.circular(5), | |
| ), | |
| child: Stack( | |
| children: [ | |
| CachedNetworkImage( | |
| imageUrl: | |
| videos.image, | |
| imageBuilder: (context, | |
| imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius | |
| .zero ?? | |
| BorderRadius | |
| .circular( | |
| 8.0), | |
| child: Image( | |
| image: | |
| imageProvider, | |
| fit: | |
| BoxFit.fill, | |
| width: 110, | |
| height: 110 + | |
| (110 * .4), | |
| ), | |
| ), | |
| placeholder: | |
| (context, | |
| url) => | |
| Shimmer( | |
| gradient: | |
| shimmerGradient, | |
| child: Container( | |
| decoration: BoxDecoration( | |
| borderRadius: BorderRadius | |
| .zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors | |
| .black), | |
| width: 110 ?? | |
| (true || | |
| false | |
| ? double | |
| .infinity | |
| : 150.0), | |
| height: 110 + | |
| (110 * | |
| .3) ?? | |
| (true || | |
| false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: | |
| (context, url, | |
| error) => | |
| Container( | |
| width: 110.0, | |
| height: 220.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius | |
| .circular( | |
| 8.0), | |
| color: Colors | |
| .grey), | |
| child: | |
| Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| GestureDetector( | |
| onTap: () {}, | |
| child: Align( | |
| alignment: | |
| Alignment | |
| .center, | |
| child: Container( | |
| width: 33, | |
| height: 33, | |
| decoration: BoxDecoration( | |
| shape: BoxShape | |
| .circle, | |
| border: Border.all( | |
| width: | |
| 2, | |
| color: Colors | |
| .white), | |
| color: Colors | |
| .black | |
| .withOpacity( | |
| 0.4)), | |
| child: Center( | |
| child: Icon( | |
| Icons | |
| .play_arrow, | |
| color: Colors | |
| .white, | |
| ), | |
| ), | |
| ), | |
| ), | |
| ), | |
| Container( | |
| height: 500, | |
| decoration: | |
| BoxDecoration( | |
| gradient: | |
| LinearGradient( | |
| colors: [ | |
| Colors.black87, | |
| Colors | |
| .transparent, | |
| Colors | |
| .transparent, | |
| Colors | |
| .transparent | |
| ], | |
| begin: Alignment | |
| .bottomCenter, | |
| end: Alignment | |
| .topCenter, | |
| stops: [ | |
| 0, | |
| 0.3, | |
| 0.6, | |
| 1 | |
| ], | |
| )), | |
| child: Align( | |
| alignment: Alignment | |
| .bottomCenter, | |
| child: videos | |
| .series == | |
| "yes" | |
| ? Text( | |
| "S${(videos.lastSeriesIndex ?? 0) + 1}:E${(videos.lastEpiIndex ?? 0) + 1}") | |
| : Text('${(Duration(seconds: videos.startAt))}' | |
| .split('.')[ | |
| 0] | |
| .padLeft( | |
| 6, | |
| '0')), | |
| ), | |
| ), | |
| ], | |
| ), | |
| ), | |
| ), | |
| ), | |
| LinearProgressIndicator( | |
| minHeight: 2, | |
| color: Colors.red, | |
| value: | |
| (videos.progress ?? 0) / | |
| 100, | |
| ), | |
| SizedBox( | |
| height: 40, | |
| child: Row( | |
| mainAxisAlignment: | |
| MainAxisAlignment | |
| .spaceBetween, | |
| children: [ | |
| IconButton( | |
| onPressed: () { | |
| final _index = video | |
| .indexWhere((element) => | |
| element | |
| .name == | |
| state | |
| .listVideos[ | |
| reversedIndex] | |
| .name); | |
| showModalBottomSheet( | |
| context: | |
| context, | |
| useRootNavigator: | |
| true, | |
| backgroundColor: | |
| Colors | |
| .transparent, | |
| builder: (_) => | |
| ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != | |
| -1, | |
| onRemove: | |
| () async { | |
| await LocalStorage.removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt( | |
| _index); | |
| setState( | |
| () {}); | |
| }, | |
| video: state | |
| .listVideos[ | |
| reversedIndex], | |
| onMyListTap: | |
| () async { | |
| video.insert( | |
| 0, | |
| state.listVideos[reversedIndex]); | |
| setState( | |
| () {}); | |
| await LocalStorage.addMovieToMyList( | |
| state.listVideos[reversedIndex]); | |
| }, | |
| tokenLink: | |
| tokenlink, | |
| azurelink: | |
| azurelink, | |
| )); | |
| }, | |
| icon: Icon( | |
| Icons | |
| .info_outline, | |
| color: Colors | |
| .white)), | |
| IconButton( | |
| onPressed: () { | |
| final _index = video | |
| .indexWhere((element) => | |
| element | |
| .name == | |
| state | |
| .listVideos[ | |
| reversedIndex] | |
| .name); | |
| showModalBottomSheet( | |
| context: context, | |
| useRootNavigator: | |
| true, | |
| backgroundColor: | |
| Colors | |
| .transparent, | |
| builder: (_) => | |
| ActionContnueWatchingBottom( | |
| video: videos, | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: | |
| () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index] | |
| .name); | |
| video.removeAt( | |
| _index); | |
| setState(() {}); | |
| }, | |
| onMyListTap: | |
| () async { | |
| video.insert( | |
| 0, | |
| state.listVideos[ | |
| reversedIndex]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| state.listVideos[ | |
| reversedIndex]); | |
| }, | |
| ), | |
| ); | |
| }, | |
| icon: Icon( | |
| Icons | |
| .more_vert_sharp, | |
| color: | |
| Colors.white), | |
| ) | |
| ], | |
| ), | |
| ) | |
| ], | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| SizedBox( | |
| height: 30, | |
| ), | |
| ]); | |
| } | |
| return Container(); | |
| }), | |
| Column( | |
| crossAxisAlignment: CrossAxisAlignment.start, | |
| children: [ | |
| video.length != 0 | |
| ? Padding( | |
| padding: const EdgeInsets.only( | |
| left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "My List", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: | |
| FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons | |
| .keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: url.toString(), | |
| type: "mylist", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "My List", | |
| video: video, | |
| ), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ) | |
| : Container(), | |
| video.length != 0 | |
| ? SizedBox( | |
| height: 8, | |
| ) | |
| : Container(), | |
| video.length != 0 | |
| ? SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| child: GestureDetector( | |
| onTap: () { | |
| // Navigator.push(context, | |
| // MaterialPageRoute(builder: (_) => Streaming())); | |
| }, | |
| child: Padding( | |
| padding: EdgeInsets.only(left: 10), | |
| child: Row( | |
| children: List.generate( | |
| video.length < 10 | |
| ? video.length | |
| : 10, (index) { | |
| int reversedIndex = | |
| video.length - 1 - index; | |
| video.reversed.toList(); | |
| var videosc = video[reversedIndex]; | |
| // video.retainWhere((element) => | |
| // element.series[index] == "not"); | |
| // print(video | |
| // .where((element) => element.series == 'not') | |
| // .toList()); | |
| return GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| video[reversedIndex] | |
| .name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: | |
| Colors.transparent, | |
| builder: (_) => | |
| ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index] | |
| .name); | |
| video.removeAt( | |
| _index); | |
| setState(() {}); | |
| }, | |
| video: video[ | |
| reversedIndex], | |
| onMyListTap: | |
| () async { | |
| video.insert( | |
| 0, | |
| video[ | |
| reversedIndex]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| video[ | |
| reversedIndex]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: CachedNetworkImage( | |
| imageUrl: videosc.image, | |
| imageBuilder: | |
| (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: | |
| BorderRadius.zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| child: Container( | |
| margin: EdgeInsets.only( | |
| right: 8), | |
| width: 110, | |
| height: 110 + (110 * .4), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius | |
| .circular(6), | |
| image: DecorationImage( | |
| image: | |
| imageProvider, | |
| fit: BoxFit.fill)), | |
| ), | |
| ), | |
| placeholder: (context, url) => | |
| Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| margin: EdgeInsets.only( | |
| right: 8), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius | |
| .zero ?? | |
| BorderRadius | |
| .circular( | |
| 8.0), | |
| color: Colors.black), | |
| width: 110 ?? | |
| (true || false | |
| ? double.infinity | |
| : 150.0), | |
| height: | |
| 110 + (110 * .4) ?? | |
| (true || false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: | |
| (context, url, error) => | |
| Container( | |
| width: 110.0, | |
| height: 155.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| ), | |
| ) | |
| : Container(), | |
| video.length != 0 | |
| ? SizedBox( | |
| height: 30, | |
| ) | |
| : Container(), | |
| Padding( | |
| padding: | |
| const EdgeInsets.only(left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "Popular on Streamflix", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons.keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| popular[index].name); | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: urlpopular.toString(), | |
| type: "series", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "Popular on Streamflix", | |
| video: video, | |
| newvideo: popular, | |
| ), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ), | |
| SizedBox( | |
| height: 8, | |
| ), | |
| SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| child: GestureDetector( | |
| onTap: () { | |
| // Navigator.push(context, | |
| // MaterialPageRoute(builder: (_) => Streaming())); | |
| }, | |
| child: Padding( | |
| padding: EdgeInsets.only(left: 10), | |
| child: Row( | |
| children: List.generate( | |
| popular.length < 10 | |
| ? popular.length | |
| : 10, (index) { | |
| return GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| popular[index].name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: | |
| Colors.transparent, | |
| builder: (_) => | |
| ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index] | |
| .name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| video: popular[index], | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, popular[index]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| popular[index]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: CachedNetworkImage( | |
| imageUrl: popular[index].image, | |
| imageBuilder: | |
| (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| width: 110, | |
| height: 110 + (110 * .4), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(6), | |
| image: DecorationImage( | |
| image: imageProvider, | |
| fit: BoxFit.fill)), | |
| ), | |
| ), | |
| placeholder: (context, url) => | |
| Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| margin: | |
| EdgeInsets.only(right: 8), | |
| decoration: BoxDecoration( | |
| borderRadius: BorderRadius | |
| .zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors.black), | |
| width: 110 ?? | |
| (true || false | |
| ? double.infinity | |
| : 150.0), | |
| height: 110 + (110 * .4) ?? | |
| (true || false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: (context, url, error) => | |
| Container( | |
| width: 110.0, | |
| height: 155.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| ), | |
| ), | |
| SizedBox( | |
| height: 30, | |
| ), | |
| Padding( | |
| padding: | |
| const EdgeInsets.only(left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "New Releases", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons.keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: | |
| urlnewreleases.toString(), | |
| type: "series", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "New Releases", | |
| video: video, | |
| newvideo: newreleases), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ), | |
| SizedBox( | |
| height: 8, | |
| ), | |
| SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| child: Padding( | |
| padding: EdgeInsets.only(left: 10), | |
| child: Row( | |
| children: List.generate( | |
| newreleases.length < 10 | |
| ? newreleases.length | |
| : 10, (index) { | |
| return GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| newreleases[index].name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: Colors.transparent, | |
| builder: (_) => ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| video: newreleases[index], | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, newreleases[index]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| newreleases[index]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: CachedNetworkImage( | |
| imageUrl: newreleases[index].image, | |
| imageBuilder: | |
| (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| width: 110, | |
| height: 110 + (110 * .4), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(6), | |
| image: DecorationImage( | |
| image: imageProvider, | |
| fit: BoxFit.fill)), | |
| ), | |
| ), | |
| placeholder: (context, url) => Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors.black), | |
| width: 110 ?? | |
| (true || false | |
| ? double.infinity | |
| : 150.0), | |
| height: 110 + (110 * .4) ?? | |
| (true || false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: (context, url, error) => | |
| Container( | |
| width: 110.0, | |
| height: 155.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| ), | |
| SizedBox( | |
| height: 30, | |
| ), | |
| Padding( | |
| padding: | |
| const EdgeInsets.only(left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "Hollywood Series", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons.keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: | |
| urltrending.toString(), | |
| type: "series", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "Hollywood Series", | |
| video: video, | |
| newvideo: trending), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ), | |
| SizedBox( | |
| height: 8, | |
| ), | |
| SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| child: GestureDetector( | |
| onTap: () {}, | |
| child: Padding( | |
| padding: EdgeInsets.only(left: 10), | |
| child: Row( | |
| children: List.generate( | |
| trending.length < 10 | |
| ? trending.length | |
| : 10, (index) { | |
| return GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| trending[index].name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: | |
| Colors.transparent, | |
| builder: (_) => | |
| ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index] | |
| .name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| video: trending[index], | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, trending[index]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| trending[index]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: CachedNetworkImage( | |
| imageUrl: trending[index].image, | |
| imageBuilder: | |
| (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| width: 110, | |
| height: 110 + (110 * .4), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(6), | |
| image: DecorationImage( | |
| image: imageProvider, | |
| fit: BoxFit.fill)), | |
| ), | |
| ), | |
| placeholder: (context, url) => | |
| Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| margin: | |
| EdgeInsets.only(right: 8), | |
| decoration: BoxDecoration( | |
| borderRadius: BorderRadius | |
| .zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors.black), | |
| width: 110 ?? | |
| (true || false | |
| ? double.infinity | |
| : 150.0), | |
| height: 110 + (110 * .4) ?? | |
| (true || false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: (context, url, error) => | |
| Container( | |
| width: 110.0, | |
| height: 155.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| ), | |
| ), | |
| SizedBox( | |
| height: 30, | |
| ), | |
| Padding( | |
| padding: | |
| const EdgeInsets.only(left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "Only on Streamflix", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons.keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: | |
| urlcomplete.toString(), | |
| type: "series", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "Only on Streamflix", | |
| video: video, | |
| newvideo: complete), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ), | |
| SizedBox( | |
| height: 8, | |
| ), | |
| SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| child: GestureDetector( | |
| onTap: () {}, | |
| child: Padding( | |
| padding: EdgeInsets.only(left: 10), | |
| child: Row( | |
| children: List.generate( | |
| complete.length < 10 | |
| ? complete.length | |
| : 10, (index) { | |
| int reverse = complete.length - 1 - index; | |
| return GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| complete[reverse].name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: | |
| Colors.transparent, | |
| builder: (_) => | |
| ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index] | |
| .name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| video: complete[reverse], | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, complete[reverse]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| complete[ | |
| reverse]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: CachedNetworkImage( | |
| imageUrl: complete[reverse].image, | |
| imageBuilder: | |
| (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| width: 170, | |
| height: 170 + (170 * .8), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(6), | |
| image: DecorationImage( | |
| image: imageProvider, | |
| fit: BoxFit.cover)), | |
| ), | |
| ), | |
| placeholder: (context, url) => | |
| Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| margin: | |
| EdgeInsets.only(right: 8), | |
| decoration: BoxDecoration( | |
| borderRadius: BorderRadius | |
| .zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors.black), | |
| width: 170 ?? | |
| (true || false | |
| ? double.infinity | |
| : 150.0), | |
| height: 170 + (170 * .4) ?? | |
| (true || false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: (context, url, error) => | |
| Container( | |
| width: 170.0, | |
| height: 330.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| ), | |
| ), | |
| SizedBox( | |
| height: 30, | |
| ), | |
| Padding( | |
| padding: | |
| const EdgeInsets.only(left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "US TV Shows", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons.keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: | |
| urlustvshows.toString(), | |
| type: "series", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "US TV Shows", | |
| video: video, | |
| newvideo: ustvshows), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ), | |
| SizedBox( | |
| height: 8, | |
| ), | |
| SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| child: Padding( | |
| padding: EdgeInsets.only(left: 10), | |
| child: Row( | |
| children: List.generate( | |
| ustvshows.length < 10 | |
| ? ustvshows.length | |
| : 10, (index) { | |
| return GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| ustvshows[index].name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: Colors.transparent, | |
| builder: (_) => ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| video: ustvshows[index], | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, ustvshows[index]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| ustvshows[index]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: CachedNetworkImage( | |
| imageUrl: ustvshows[index].image, | |
| imageBuilder: | |
| (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| width: 110, | |
| height: 110 + (110 * .4), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(6), | |
| image: DecorationImage( | |
| image: imageProvider, | |
| fit: BoxFit.fill)), | |
| ), | |
| ), | |
| placeholder: (context, url) => Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors.black), | |
| width: 110 ?? | |
| (true || false | |
| ? double.infinity | |
| : 150.0), | |
| height: 110 + (110 * .4) ?? | |
| (true || false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: (context, url, error) => | |
| Container( | |
| width: 110.0, | |
| height: 155.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| ), | |
| SizedBox( | |
| height: 30, | |
| ), | |
| Padding( | |
| padding: | |
| const EdgeInsets.only(left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "Anime", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons.keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: urlanime.toString(), | |
| type: "series", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "Anime", | |
| video: video, | |
| newvideo: anime), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ), | |
| SizedBox( | |
| height: 8, | |
| ), | |
| SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| child: Padding( | |
| padding: EdgeInsets.only(left: 10), | |
| child: Row( | |
| children: List.generate( | |
| anime.length < 10 ? anime.length : 10, | |
| (index) { | |
| return GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| anime[index].name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: Colors.transparent, | |
| builder: (_) => ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| video: anime[index], | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, anime[index]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| anime[index]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: CachedNetworkImage( | |
| imageUrl: anime[index].image, | |
| imageBuilder: | |
| (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| width: 110, | |
| height: 110 + (110 * .4), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(6), | |
| image: DecorationImage( | |
| image: imageProvider, | |
| fit: BoxFit.fill)), | |
| ), | |
| ), | |
| placeholder: (context, url) => Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors.black), | |
| width: 110 ?? | |
| (true || false | |
| ? double.infinity | |
| : 150.0), | |
| height: 110 + (110 * .4) ?? | |
| (true || false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: (context, url, error) => | |
| Container( | |
| width: 110.0, | |
| height: 155.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| ), | |
| SizedBox( | |
| height: 30, | |
| ), | |
| Padding( | |
| padding: | |
| const EdgeInsets.only(left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "Korean Drama", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons.keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: koreanlink.toString(), | |
| type: "series", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "Korean Drama", | |
| video: video, | |
| newvideo: korean), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ), | |
| SizedBox( | |
| height: 8, | |
| ), | |
| SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| child: Padding( | |
| padding: EdgeInsets.only(left: 10), | |
| child: Row( | |
| children: List.generate( | |
| korean.length < 10 ? korean.length : 10, | |
| (index) { | |
| return GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| korean[index].name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: Colors.transparent, | |
| builder: (_) => ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| video: korean[index], | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, korean[index]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| korean[index]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: CachedNetworkImage( | |
| imageUrl: korean[index].image, | |
| imageBuilder: | |
| (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| width: 110, | |
| height: 110 + (110 * .4), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(6), | |
| image: DecorationImage( | |
| image: imageProvider, | |
| fit: BoxFit.fill)), | |
| ), | |
| ), | |
| placeholder: (context, url) => Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors.black), | |
| width: 110 ?? | |
| (true || false | |
| ? double.infinity | |
| : 150.0), | |
| height: 110 + (110 * .4) ?? | |
| (true || false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: (context, url, error) => | |
| Container( | |
| width: 110.0, | |
| height: 155.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| ), | |
| SizedBox( | |
| height: 30, | |
| ), | |
| Padding( | |
| padding: | |
| const EdgeInsets.only(left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "Made in India", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons.keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: | |
| urlpopularbollywoodcrime | |
| .toString(), | |
| type: "series", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "Made in India", | |
| video: video, | |
| newvideo: | |
| popularbollywoodcrime), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ), | |
| SizedBox( | |
| height: 8, | |
| ), | |
| SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| child: Padding( | |
| padding: EdgeInsets.only(left: 10), | |
| child: Row( | |
| children: List.generate( | |
| popularbollywoodcrime.length < 10 | |
| ? popularbollywoodcrime.length | |
| : 10, (index) { | |
| return GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| popularbollywoodcrime[index] | |
| .name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: Colors.transparent, | |
| builder: (_) => ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| video: popularbollywoodcrime[ | |
| index], | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, | |
| popularbollywoodcrime[ | |
| index]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| popularbollywoodcrime[ | |
| index]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: CachedNetworkImage( | |
| imageUrl: | |
| popularbollywoodcrime[index].image, | |
| imageBuilder: | |
| (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| width: 110, | |
| height: 110 + (110 * .4), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(6), | |
| image: DecorationImage( | |
| image: imageProvider, | |
| fit: BoxFit.fill)), | |
| ), | |
| ), | |
| placeholder: (context, url) => Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors.black), | |
| width: 110 ?? | |
| (true || false | |
| ? double.infinity | |
| : 150.0), | |
| height: 110 + (110 * .4) ?? | |
| (true || false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: (context, url, error) => | |
| Container( | |
| width: 110.0, | |
| height: 155.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| ), | |
| SizedBox( | |
| height: 30, | |
| ), | |
| Padding( | |
| padding: | |
| const EdgeInsets.only(left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "Punjabi Drama", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons.keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: urlpunjabi.toString(), | |
| type: "series", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "Punjabi Drama", | |
| video: video, | |
| newvideo: punjabi, | |
| ), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ), | |
| SizedBox( | |
| height: 8, | |
| ), | |
| SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| child: Padding( | |
| padding: EdgeInsets.only(left: 10), | |
| child: Row( | |
| children: List.generate( | |
| punjabi.length < 10 ? punjabi.length : 10, | |
| (index) { | |
| return GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| punjabi[index].name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: Colors.transparent, | |
| builder: (_) => ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| video: punjabi[index], | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, punjabi[index]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| punjabi[index]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: CachedNetworkImage( | |
| imageUrl: punjabi[index].image, | |
| imageBuilder: | |
| (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| width: 110, | |
| height: 110 + (110 * .4), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(6), | |
| image: DecorationImage( | |
| image: imageProvider, | |
| fit: BoxFit.fill)), | |
| ), | |
| ), | |
| placeholder: (context, url) => Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors.black), | |
| width: 110 ?? | |
| (true || false | |
| ? double.infinity | |
| : 150.0), | |
| height: 110 + (110 * .4) ?? | |
| (true || false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: (context, url, error) => | |
| Container( | |
| width: 110.0, | |
| height: 155.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| ), | |
| SizedBox( | |
| height: 30, | |
| ), | |
| Padding( | |
| padding: | |
| const EdgeInsets.only(left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "South Indian", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons.keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: urlcomplete.toString(), | |
| type: "series", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "South", | |
| video: video, | |
| newvideo: south, | |
| ), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ), | |
| SizedBox( | |
| height: 8, | |
| ), | |
| SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| child: Padding( | |
| padding: EdgeInsets.only(left: 10), | |
| child: Row( | |
| children: List.generate( | |
| south.length < 10 ? south.length : 10, | |
| (index) { | |
| return GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| south[index].name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: Colors.transparent, | |
| builder: (_) => ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| video: south[index], | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, south[index]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| south[index]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: CachedNetworkImage( | |
| imageUrl: south[index].image, | |
| imageBuilder: | |
| (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| width: 110, | |
| height: 110 + (110 * .4), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(6), | |
| image: DecorationImage( | |
| image: imageProvider, | |
| fit: BoxFit.fill)), | |
| ), | |
| ), | |
| placeholder: (context, url) => Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors.black), | |
| width: 110 ?? | |
| (true || false | |
| ? double.infinity | |
| : 150.0), | |
| height: 110 + (110 * .4) ?? | |
| (true || false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: (context, url, error) => | |
| Container( | |
| width: 110.0, | |
| height: 155.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| ), | |
| SizedBox( | |
| height: 30, | |
| ), | |
| Padding( | |
| padding: | |
| const EdgeInsets.only(left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "Sci-Fi", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons.keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: urlcomplete.toString(), | |
| type: "series", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "Sci-Fi", | |
| video: video, | |
| newvideo: scifi, | |
| ), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ), | |
| SizedBox( | |
| height: 8, | |
| ), | |
| SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| child: Padding( | |
| padding: EdgeInsets.only(left: 10), | |
| child: Row( | |
| children: List.generate( | |
| scifi.length < 10 ? scifi.length : 10, | |
| (index) { | |
| return GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| scifi[index].name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: Colors.transparent, | |
| builder: (_) => ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| video: scifi[index], | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, scifi[index]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| scifi[index]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: CachedNetworkImage( | |
| imageUrl: scifi[index].image, | |
| imageBuilder: | |
| (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| width: 110, | |
| height: 110 + (110 * .4), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(6), | |
| image: DecorationImage( | |
| image: imageProvider, | |
| fit: BoxFit.fill)), | |
| ), | |
| ), | |
| placeholder: (context, url) => Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors.black), | |
| width: 110 ?? | |
| (true || false | |
| ? double.infinity | |
| : 150.0), | |
| height: 110 + (110 * .4) ?? | |
| (true || false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: (context, url, error) => | |
| Container( | |
| width: 110.0, | |
| height: 155.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| ), | |
| SizedBox( | |
| height: 30, | |
| ), | |
| Padding( | |
| padding: | |
| const EdgeInsets.only(left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "Action", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons.keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: urlcomplete.toString(), | |
| type: "series", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "Action", | |
| video: video, | |
| newvideo: action, | |
| ), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ), | |
| SizedBox( | |
| height: 8, | |
| ), | |
| SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| child: Padding( | |
| padding: EdgeInsets.only(left: 10), | |
| child: Row( | |
| children: List.generate( | |
| action.length < 10 ? action.length : 10, | |
| (index) { | |
| return GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| action[index].name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: Colors.transparent, | |
| builder: (_) => ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| video: action[index], | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, action[index]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| action[index]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: CachedNetworkImage( | |
| imageUrl: action[index].image, | |
| imageBuilder: | |
| (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| width: 110, | |
| height: 110 + (110 * .4), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(6), | |
| image: DecorationImage( | |
| image: imageProvider, | |
| fit: BoxFit.fill)), | |
| ), | |
| ), | |
| placeholder: (context, url) => Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors.black), | |
| width: 110 ?? | |
| (true || false | |
| ? double.infinity | |
| : 150.0), | |
| height: 110 + (110 * .4) ?? | |
| (true || false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: (context, url, error) => | |
| Container( | |
| width: 110.0, | |
| height: 155.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| ), | |
| SizedBox( | |
| height: 30, | |
| ), | |
| Padding( | |
| padding: | |
| const EdgeInsets.only(left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "Adventure", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons.keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: urlcomplete.toString(), | |
| type: "series", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "Adventure", | |
| video: video, | |
| newvideo: adventure, | |
| ), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ), | |
| SizedBox( | |
| height: 8, | |
| ), | |
| SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| child: Padding( | |
| padding: EdgeInsets.only(left: 10), | |
| child: Row( | |
| children: List.generate( | |
| adventure.length < 10 | |
| ? adventure.length | |
| : 10, (index) { | |
| return GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| adventure[index].name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: Colors.transparent, | |
| builder: (_) => ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| video: adventure[index], | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, adventure[index]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| adventure[index]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: CachedNetworkImage( | |
| imageUrl: adventure[index].image, | |
| imageBuilder: | |
| (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| width: 110, | |
| height: 110 + (110 * .4), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(6), | |
| image: DecorationImage( | |
| image: imageProvider, | |
| fit: BoxFit.fill)), | |
| ), | |
| ), | |
| placeholder: (context, url) => Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors.black), | |
| width: 110 ?? | |
| (true || false | |
| ? double.infinity | |
| : 150.0), | |
| height: 110 + (110 * .4) ?? | |
| (true || false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: (context, url, error) => | |
| Container( | |
| width: 110.0, | |
| height: 155.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| ), | |
| SizedBox( | |
| height: 30, | |
| ), | |
| Padding( | |
| padding: | |
| const EdgeInsets.only(left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "Horror", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons.keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: urlcomplete.toString(), | |
| type: "series", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "Horror", | |
| video: video, | |
| newvideo: horror, | |
| ), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ), | |
| SizedBox( | |
| height: 8, | |
| ), | |
| SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| child: Padding( | |
| padding: EdgeInsets.only(left: 10), | |
| child: Row( | |
| children: List.generate( | |
| horror.length < 10 ? horror.length : 10, | |
| (index) { | |
| return GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| horror[index].name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: Colors.transparent, | |
| builder: (_) => ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| video: horror[index], | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, horror[index]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| horror[index]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: CachedNetworkImage( | |
| imageUrl: horror[index].image, | |
| imageBuilder: | |
| (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| width: 110, | |
| height: 110 + (110 * .4), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(6), | |
| image: DecorationImage( | |
| image: imageProvider, | |
| fit: BoxFit.fill)), | |
| ), | |
| ), | |
| placeholder: (context, url) => Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors.black), | |
| width: 110 ?? | |
| (true || false | |
| ? double.infinity | |
| : 150.0), | |
| height: 110 + (110 * .4) ?? | |
| (true || false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: (context, url, error) => | |
| Container( | |
| width: 110.0, | |
| height: 155.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| ), | |
| SizedBox( | |
| height: 30, | |
| ), | |
| Padding( | |
| padding: | |
| const EdgeInsets.only(left: 15, right: 15), | |
| child: Row( | |
| children: [ | |
| Expanded( | |
| child: Row( | |
| children: [ | |
| Text( | |
| "Romantic", | |
| style: TextStyle( | |
| fontSize: 18, | |
| fontWeight: FontWeight.bold), | |
| ), | |
| ], | |
| ), | |
| ), | |
| GestureDetector( | |
| child: Icon( | |
| Icons.keyboard_arrow_right_rounded, | |
| color: Colors.white, | |
| ), | |
| onTap: () { | |
| Navigator.of(context, | |
| rootNavigator: true) | |
| .push( | |
| MaterialPageRoute( | |
| builder: (_) => Seeall( | |
| videoUrl: urlcomplete.toString(), | |
| type: "series", | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| title: "Romantic", | |
| video: video, | |
| newvideo: romantic, | |
| ), | |
| ), | |
| ); | |
| }), | |
| ], | |
| ), | |
| ), | |
| SizedBox( | |
| height: 8, | |
| ), | |
| SingleChildScrollView( | |
| scrollDirection: Axis.horizontal, | |
| child: Padding( | |
| padding: EdgeInsets.only(left: 10), | |
| child: Row( | |
| children: List.generate( | |
| romantic.length < 10 | |
| ? romantic.length | |
| : 10, (index) { | |
| return GestureDetector( | |
| onTap: () { | |
| final _index = video.indexWhere( | |
| (element) => | |
| element.name == | |
| romantic[index].name); | |
| showModalBottomSheet( | |
| context: context, | |
| backgroundColor: Colors.transparent, | |
| builder: (_) => ShowVideoDetailMini( | |
| isExistFromMyList: | |
| _index != -1, | |
| onRemove: () async { | |
| await LocalStorage | |
| .removeMovieFromMyList( | |
| video[_index].name); | |
| video.removeAt(_index); | |
| setState(() {}); | |
| }, | |
| video: romantic[index], | |
| onMyListTap: () async { | |
| video.insert( | |
| 0, romantic[index]); | |
| setState(() {}); | |
| await LocalStorage | |
| .addMovieToMyList( | |
| romantic[index]); | |
| }, | |
| tokenLink: tokenlink, | |
| azurelink: azurelink, | |
| )); | |
| }, | |
| child: CachedNetworkImage( | |
| imageUrl: romantic[index].image, | |
| imageBuilder: | |
| (context, imageProvider) => | |
| ClipRRect( | |
| borderRadius: BorderRadius.zero ?? | |
| BorderRadius.circular(8.0), | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| width: 110, | |
| height: 110 + (110 * .4), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(6), | |
| image: DecorationImage( | |
| image: imageProvider, | |
| fit: BoxFit.fill)), | |
| ), | |
| ), | |
| placeholder: (context, url) => Shimmer( | |
| gradient: shimmerGradient, | |
| child: Container( | |
| margin: EdgeInsets.only(right: 8), | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.zero ?? | |
| BorderRadius.circular( | |
| 8.0), | |
| color: Colors.black), | |
| width: 110 ?? | |
| (true || false | |
| ? double.infinity | |
| : 150.0), | |
| height: 110 + (110 * .4) ?? | |
| (true || false | |
| ? 180.0 | |
| : 68.0)), | |
| ), | |
| errorWidget: (context, url, error) => | |
| Container( | |
| width: 110.0, | |
| height: 155.0, | |
| decoration: BoxDecoration( | |
| borderRadius: | |
| BorderRadius.circular(8.0), | |
| color: Colors.grey), | |
| child: Image.asset( | |
| 'assets/images/logo.png', | |
| ), | |
| ), | |
| ), | |
| ); | |
| }), | |
| ), | |
| ), | |
| ), | |
| SizedBox( | |
| height: 30, | |
| ), | |
| ], | |
| ) | |
| ], | |
| ); | |
| }, | |
| ), | |
| ), | |
| ), | |
| ])), | |
| ); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment