import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:teso/Classes/TesoUser.dart'; import 'package:teso/util/SizeConfig.dart'; import 'package:teso/util/consts.dart'; import 'package:flutter/material.dart'; import 'package:teso/Pages/PageWidgets/Personal/header.dart'; import 'package:teso/Pages/Sub_Pages/PersonalSub/Friends.dart'; import 'package:teso/Pages/Sub_Pages/PersonalSub/Posts.dart'; import 'package:teso/Pages/Sub_Pages/PersonalSub/Recently.dart'; import 'package:teso/providers/user_provider.dart'; import 'package:provider/provider.dart'; class Personnal extends StatefulWidget { final Function showSettings; const Personnal({Key key, this.showSettings}) : super(key: key); @override _PersonnalState createState() => _PersonnalState(showSettings: this.showSettings); } enum AppBarBehavior { normal, pinned, floating, snapping } class _PersonnalState extends State with TickerProviderStateMixin { TesoUser currentUser; Function showSettings; double scale; _PersonnalState({this.showSettings}); double _appBarHeightSpecial = 275.0; RefreshController _refreshController = RefreshController(initialRefresh: false); TabController tabsController; Widget _randomHeightWidgets(BuildContext context) { return Consumer( builder: (BuildContext context, UserProvider user, Widget child) { user.getCurrentUser(); currentUser = user.currentUser; if (user.currentUser == null || currentUser == null) { return Container(); } else { String dp = userdpURL + currentUser.thumbnail_dp; return buildProfileHeader( context, currentUser.gold, currentUser.silver, currentUser.username, dp, user.friends != null ? user.friends.length.toString() : currentUser.friends, currentUser.firstname + " " + currentUser.lastname, _appBarHeightSpecial); } }); } void _onRefresh() async { Provider.of(context, listen: false).getUserInformation(); switch (tabsController.index) { case 0: await Provider.of(context, listen: false).pullAds(); Provider.of(context, listen: false).loadFriends(); Provider.of(context, listen: false).getCoupons(); break; case 1: await Provider.of(context, listen: false).loadFriends(); Provider.of(context, listen: false).getCoupons(); Provider.of(context, listen: false).pullAds(); break; default: break; } _refreshController.refreshCompleted(); } @override void initState() { super.initState(); tabsController = new TabController(length: 3, initialIndex: 0, vsync: this); } @override void dispose() { tabsController.dispose(); _refreshController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { SizeConfig().init(context); return Scaffold( extendBody: true, appBar: PreferredSize( preferredSize: Size.fromHeight(SizeConfig.blockSizeHorizontal * 73.1), child: Column( children: [ AppBar( backgroundColor: Colors.transparent, toolbarHeight: 50, automaticallyImplyLeading: false, title: Consumer( builder: (BuildContext context, UserProvider user, Widget child) { currentUser = user.currentUser; if (user.currentUser == null || currentUser == null) { return Container(); } else { return Text(user.currentUser.username, style: TextStyle( color: Theme.of(context).primaryColorLight, )); } }, ), actions: [ Container( width: 50, child: Align( alignment: Alignment.topRight, child: Container( margin: EdgeInsets.only(top: 10), height: 30.0, width: 45.0, //color: Color.fromRGBO(0, 0, 0, 0.4), decoration: new BoxDecoration( shape: BoxShape.circle, color: Color.fromRGBO(0, 0, 0, 0.4), //border: Border.all(color: Colors.black, width: 2.0), ), child: InkWell( onTap: () => showSettings(context), child: Icon( Icons.settings, color: Colors.white, ), ), ), ), ) ], ), _randomHeightWidgets(context), TabBar( labelStyle: TextStyle( fontSize: SizeConfig.safeBlockHorizontal * 3, ), controller: tabsController, tabs: [ Tab( text: "Posts", ), Tab( text: "Friends", ), Tab( text: "Recently Viewed", ), ], ), ], ), ), body: SmartRefresher( enablePullDown: true, enablePullUp: false, header: ClassicHeader(), controller: _refreshController, onRefresh: _onRefresh, child: TabBarView( controller: tabsController, children: [ Posts(), Friends(), Recently(), ], ), ), ); } }