import 'dart:convert'; import 'dart:math'; import 'package:http/http.dart' as http; import 'package:flutter/material.dart'; import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; import 'package:flutter/cupertino.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:teso/Classes/API%20Clasess/Post.dart'; import 'package:teso/Pages/PageWidgets/Home/homeTile.dart'; import 'package:teso/Pages/Sub_Pages/homeSub/VideoList.dart'; import 'package:teso/util/consts.dart'; class HomeFeed extends StatefulWidget { @override _HomeFeedState createState() => _HomeFeedState(); } class _HomeFeedState extends State { ScrollController _controller; // List trends; List show; int count; var _future; List deadFeed; RefreshController _refreshController = RefreshController(initialRefresh: false); Future> pullAds() async { try { SharedPreferences prefs = await SharedPreferences.getInstance(); String token = prefs.getString("tokensTeso"); Map requestHeaders = { 'Content-type': 'application/json', 'Authorization': token }; var register = serverLocation + 'posts/homefeed'; var client = await http.post(Uri.parse(register), headers: requestHeaders); if (client.statusCode == 200) { var posts = jsonDecode(client.body); setState(() { this.show = List.from( posts.map((model) => Post.fromJSON(model)).toList()); // this.show.sort((b, a) => a.timestamp.compareTo(b.timestamp)); }); await prefs.setString("homefeeds", client.body); // await fetchImages(); // return show; } else { return null; } } catch (e) { return null; } } void _scrollListener() { if (_controller.offset >= _controller.position.maxScrollExtent && !_controller.position.outOfRange) { pullAds(); } } void _onRefresh() async { try { await pullAds(); } catch (e) { print(e); } _refreshController.refreshCompleted(); } Future watch(advert) async { List towatch = []; towatch.add(advert); if (show.length != 0) { for (int i = 0; (i < show.length) && (i < 10); i++) { final _random = new Random(); towatch.add(show[_random.nextInt(show.length)]); } } else if (show.length == 0) { for (int i = 0; (i < deadFeed.length) && (i < 10); i++) { final _random = new Random(); towatch.add(deadFeed[_random.nextInt(show.length)]); } } Post reported = await Navigator.of(context).push( new PageRouteBuilder( pageBuilder: (_, __, ___) => new VideoList( postedAd: towatch, // posts: towatch, // user: user, //friend: addable, ), ), ); if (reported != null) { show.remove(reported); SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setString("homefeeds", jsonEncode(show)); print(prefs.getString("homefeed")); } } @override void initState() { // WidgetsBinding.instance.addPostFrameCallback((_) => widget.toggle(1)); _controller = ScrollController(); _controller.addListener(_scrollListener); count = 0; // pullAds(); SharedPreferences.getInstance().then((value) { if (value.getString("homefeeds") != null) { var posts = jsonDecode(value.getString("homefeeds")); setState(() { deadFeed = List.from( posts.map((model) => Post.fromJSON(model)).toList()); }); } }); _future = pullAds(); super.initState(); } @override void dispose() { _controller.dispose(); _refreshController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: FutureBuilder( initialData: deadFeed, future: _future, builder: (context, snapshot) { if (show == null && deadFeed == null && (snapshot.connectionState == ConnectionState.none || snapshot.connectionState == ConnectionState.waiting)) { return Center( child: CupertinoActivityIndicator( animating: true, radius: 15, ), ); } if (show == null && deadFeed == null && snapshot.connectionState == ConnectionState.done) { return SmartRefresher( enablePullDown: true, enablePullUp: false, header: ClassicHeader(), controller: _refreshController, onRefresh: _onRefresh, child: Container( child: Center( child: Text("An error occurred"), ), ), ); } else { show = show != null ? show : deadFeed; return SmartRefresher( enablePullDown: true, enablePullUp: false, header: ClassicHeader(), controller: _refreshController, onRefresh: _onRefresh, child: StaggeredGridView.count( controller: _controller, crossAxisCount: 2, children: List.generate(show.length, (int index) { return show.elementAt(index).aspect == null || show.elementAt(index).aspect == "null" ? Container() : double.parse(show.elementAt(index).aspect.toString()) < 1 ? buildTile( context, show.elementAt(index), 0.65, watch) : buildTile( context, show.elementAt(index), 0.35, watch); }), staggeredTiles: List.generate( show.length, (int index) { return StaggeredTile.fit(1); }, ), ), ); } }, ), ); } }