You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

260 lines
7.4 KiB

import 'package:teso/Classes/API%20Clasess/BusinessProfile.dart';
import 'package:teso/Classes/TesoShop.dart';
import 'package:teso/Classes/TesoUser.dart';
import 'package:teso/Pages/PageWidgets/BusinessProfile/BusinessHead.dart';
import 'package:teso/Pages/Sub_Pages/Business/BusinessProducts.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:http/http.dart' as http;
import 'package:teso/util/consts.dart';
import 'package:teso/Classes/API Clasess/Product.dart';
import 'package:teso/Classes/API Clasess/CouponDetails.dart';
import 'dart:convert';
import 'package:flutter/cupertino.dart';
class BusinessProfile extends StatefulWidget {
final TesoShop shop;
const BusinessProfile({Key key, this.shop}) : super(key: key);
@override
_BusinessProfileState createState() => new _BusinessProfileState(shop: shop);
}
enum AppBarBehavior { normal, pinned, floating, snapping }
class _BusinessProfileState extends State<BusinessProfile>
with TickerProviderStateMixin {
AnimationController _containerController;
Animation<double> width;
Animation<double> heigth;
final TesoShop shop;
_BusinessProfileState({this.shop});
bool subscribed = false;
SharedPreferences prefs;
var stats;
int productTotal = 0;
int adsTotal = 0;
int couponsTotal = 0;
List<Product> products;
List<CouponDetails> coupons;
BusinessProfileClass profile;
List<TesoUser> subscribers;
List<Widget> _randomChildren;
Future<void> subscribe() async {
prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
var register = serverLocation + 'relationships/business-subscription';
var client = await http.post(Uri.parse(register),
headers: requestHeaders, body: json.encode(shop.shopID));
if (client.statusCode == 200) {
setState(() {
subscribed = true;
});
} else {
return null;
}
}
Future<void> unsubscribe() async {
prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
var register = serverLocation + 'relationships/business-unsubscribe';
var client = await http.post(Uri.parse(register),
headers: requestHeaders, body: json.encode(shop.shopID));
if (client.statusCode == 200) {
setState(() {
subscribed = false;
});
} else {
return null;
}
}
fetchProfile() async {
prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
var register = serverLocation + 'tesobusiness/profile';
var client = await http.post(Uri.parse(register),
headers: requestHeaders, body: json.encode(shop.shopID));
if (client.statusCode == 200) {
var details = jsonDecode(client.body);
setState(() {
profile = BusinessProfileClass.fromJSON(details);
products = profile.products;
coupons = profile.coupons;
couponsTotal = coupons.length;
subscribed = profile.subscribed;
subscribers = profile.subscribers;
productTotal = products.length;
});
} else {
return null;
}
}
Future<bool> fetched() async {
try {
await fetchProfile();
return true;
} catch (e) {
return false;
}
}
@override
void initState() {
stats = fetched();
_containerController = new AnimationController(
duration: new Duration(milliseconds: 2000), vsync: this);
super.initState();
width = new Tween<double>(
begin: 200.0,
end: 220.0,
).animate(
new CurvedAnimation(
parent: _containerController,
curve: Curves.ease,
),
);
heigth = new Tween<double>(
begin: 400.0,
end: 400.0,
).animate(
new CurvedAnimation(
parent: _containerController,
curve: Curves.ease,
),
);
heigth.addListener(() {
setState(() {
if (heigth.isCompleted) {}
});
});
_containerController.forward();
}
@override
void dispose() {
_containerController.dispose();
super.dispose();
}
List<Widget> _randomHeightWidgets(BuildContext context) {
_randomChildren ??= List.generate(1, (index) {
return buildHead(
context: context,
shopSelected: shop,
subscribers: subscribers.length,
coupons: couponsTotal,
products: productTotal);
});
return _randomChildren;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.transparent,
toolbarHeight: 50,
automaticallyImplyLeading: false,
title: Text(shop.shopName.toUpperCase()),
leadingWidth: 40,
leading: IconButton(
icon: Icon(Icons.arrow_back_ios),
onPressed: () => Navigator.pop(context),
),
actions: [
FutureBuilder(
future: stats,
builder: (context, snapshot) {
if (snapshot.data == null &&
snapshot.connectionState == ConnectionState.waiting) {
return Container();
} else if (snapshot.data == null &&
snapshot.connectionState == ConnectionState.done) {
return IconButton(
icon: Icon(
Icons.notifications_off,
),
onPressed: null,
);
} else {
return IconButton(
icon: Icon(
subscribed
? Icons.notifications_active
: Icons.notifications_none,
),
onPressed: () async {
if (subscribed) {
await unsubscribe();
} else {
await subscribe();
}
},
);
}
},
),
],
),
body: FutureBuilder(
future: stats,
builder: (context, snapshot) {
if (snapshot.data == null) {
return Container(
child: Center(
child: CupertinoActivityIndicator(
animating: true,
radius: 15,
),
),
);
} else {
return DefaultTabController(
length: 1,
child: NestedScrollView(
headerSliverBuilder: (context, _) {
return [
SliverList(
delegate: SliverChildListDelegate(
_randomHeightWidgets(context),
),
),
];
},
body: TabBarView(
children: [
BusinessProducts(
shopName: shop.shopName,
product: products,
),
// BusinessPosts(),
],
),
),
);
}
},
),
);
}
}