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.
 
 

408 lines
14 KiB

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:provider/provider.dart';
import 'package:teso/Pages/codeQR.dart';
import 'package:teso/providers/user_provider.dart';
import 'package:teso/util/consts.dart';
import 'dart:convert';
import 'package:teso/Classes/API Clasess/CouponDetails.dart';
import 'package:teso/providers/pageAnimations.dart';
import 'package:teso/Pages/PageWidgets/Coupons/GiftFriend.dart';
import 'package:teso/Classes/TesoUser.dart';
import 'LoadGiftRecipient.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:teso/Classes/API Clasess/CouponHead.dart';
import 'package:flutter/cupertino.dart';
class AcquiredOptions extends StatefulWidget {
final CouponDetails head;
const AcquiredOptions({Key key, this.head}) : super(key: key);
@override
_AcquiredOptionsState createState() => _AcquiredOptionsState(head: this.head);
}
class _AcquiredOptionsState extends State<AcquiredOptions> {
final CouponDetails head;
_AcquiredOptionsState({this.head});
double _value;
String result = "";
TextEditingController friendName;
TesoUser selectedFriend = new TesoUser();
bool loading = false;
double _n;
int coinCost = 0;
int _time = 0;
bool freebie = false;
changeValue(val) {
if (mounted)
setState(() {
_value = val;
});
}
calcCost() {
if (mounted)
setState(() {
_n = head.worth - (_value / 100) * head.worth;
_n.roundToDouble();
});
}
// ignore: unused_element
Future _scanQRCode() async {
result = "";
result = await Navigator.push(
context,
PageTransition(
type: PageTransitionType.downToUp,
child: QRCodeScanner(),
),
);
if (result != null && result.isNotEmpty) {
print("confirm purchase");
}
}
Future loadFriend(context) async {
selectedFriend = await showModalBottomSheet(
context: context,
// isScrollControlled: true,
// enableDrag: true,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(20.0)),
),
builder: (BuildContext bc) {
return LoadGiftRecipient();
});
if (selectedFriend != null) {
setState(() {
selectedFriend = selectedFriend;
});
friendName.text =
selectedFriend.firstname + " " + selectedFriend.lastname;
if (friendName.text.length > 15)
friendName.text = friendName.text.substring(0, 15) + "...";
} else {
friendName.text = "";
setState(() {
selectedFriend = new TesoUser();
});
}
}
Future<void> giftCoupon() async {
setState(() {
loading = true;
});
if (head.worth > 0 && selectedFriend.userGUID != null) {
CouponsHead gift = new CouponsHead();
gift.businessId = head.issuer.businessName;
gift.targetProduct = head.targetProduct.productID;
gift.couponId = head.couponId;
if (freebie) {
gift.lower = 100;
} else {
gift.lower = _value;
}
gift.state = head.countID;
gift.upper = 0;
gift.type = selectedFriend.userGUID;
gift.expiration = head.expiration;
SharedPreferences prefs = await SharedPreferences.getInstance();
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': prefs.getString('tokensTeso')
};
try {
var register2 = serverLocation + 'coupons/giftCoupon';
var client1 = await http.post(Uri.parse(register2),
body: json.encode(gift), headers: requestHeaders);
if (client1.statusCode == 200) {
setState(() {
loading = false;
});
Navigator.pop(context, true);
Provider.of<UserProvider>(context, listen: false).getCoupons();
}
} catch (e) {
setState(() {
loading = false;
});
print(e);
}
}
}
@override
void initState() {
_value = head.worth;
friendName = new TextEditingController();
_n = head.worth;
if (widget.head.type.toLowerCase().contains("freebie")) {
setState(() {
freebie = true;
});
}
super.initState();
}
void add() {
setState(() {
_time++;
coinCost = _time * 2;
});
}
void minus() {
setState(() {
if (_time != 0) {
_time--;
coinCost = (_time / 2).round();
}
});
}
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.symmetric(
horizontal: (MediaQuery.of(context).size.width) * 0.030,
vertical: (MediaQuery.of(context).size.width) * 0.040,
),
child: Material(
child: Stack(
children: [
new Wrap(
children: <Widget>[
new Container(
width: double.infinity,
margin: EdgeInsets.only(
top: 15.0,
bottom: 12.0,
),
child: Center(
child: Text(
"COUPON OPTIONS",
style: TextStyle(
fontSize: 18.0,
),
),
)),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20.0),
child: Divider(),
),
new ListTile(
leading: new Text(
"Gift To : ",
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
title: buildGiftRecipient(
context: context,
searchkey: friendName,
loadFriend: () => loadFriend(context),
friend: selectedFriend),
),
if (!freebie)
Row(
children: [
Text(
"Discount ",
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
Text("0 %"),
Slider(
value: _value,
min: 0,
max: 100,
divisions: 20,
activeColor: accentMain,
inactiveColor: darkAccent,
label: _value.toString() + "%",
onChanged: (double newValue) {
setState(() {
_value = newValue;
});
calcCost();
},
),
Text("100 %"),
],
),
Center(
child: ElevatedButton(
style: ElevatedButton.styleFrom(
primary: accentMain,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(
Radius.circular(20.0),
),
),
),
onPressed: () async => await giftCoupon(),
child: Text("Gift"),
),
),
Center(
child: Wrap(
direction: Axis.horizontal,
children: [
Container(
child: Text("Current Coupon Worth : "),
),
Container(
child: Text(
_n.toString() + " % ",
style: TextStyle(
// fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
],
),
),
// Divider(),
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceEvenly,
// children: [
// Text(
// "Additional Time (hours) ",
// style: TextStyle(
// fontWeight: FontWeight.bold,
// ),
// ),
// Container(
// width: 30,
// child: new FloatingActionButton(
// onPressed: minus,
// child: new Text(
// "-",
// style: TextStyle(
// fontSize: 30,
// color: Colors.black,
// ),
// ),
// backgroundColor: Colors.white,
// ),
// ),
// new Text(
// '$_time',
// style: TextStyle(
// fontSize: 20,
// fontWeight: FontWeight.bold,
// ),
// ),
// Container(
// width: 30,
// child: new FloatingActionButton(
// onPressed: add,
// child: new Icon(
// Icons.add,
// color: Colors.black,
// size: 20,
// ),
// backgroundColor: Colors.white,
// ),
// ),
// ],
// ),
// Center(
// child: Row(
// mainAxisAlignment: MainAxisAlignment.spaceEvenly,
// children: [
// Container(
// child: Text(
// "Cost",
// style: TextStyle(
// fontWeight: FontWeight.bold,
// ),
// ),
// ),
// Wrap(
// direction: Axis.horizontal,
// children: [
// Container(
// child: Container(
// height: 30.0,
// width: 30.0,
// decoration: new BoxDecoration(
// shape: BoxShape.circle,
// ),
// child: ClipRRect(
// borderRadius: BorderRadius.only(
// topLeft: Radius.circular(50.0),
// topRight: Radius.circular(50.0),
// bottomLeft: Radius.circular(50),
// bottomRight: Radius.circular(50),
// ),
// child: Image(
// height: 30,
// width: 30,
// fit: BoxFit.fill,
// image:
// AssetImage("assets/images/silver1.png"),
// ),
// ),
// ),
// ),
// Container(
// width: 30,
// height: 30,
// child: Center(
// child: Text(
// "$_time",
// style: TextStyle(
// fontSize: 16.5,
// fontWeight: FontWeight.bold,
// ),
// ),
// ),
// ),
// ],
// ),
// ],
// ),
// ),
// Center(
// child: ElevatedButton(
// style: ElevatedButton.styleFrom(
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(20.0),
// ),
// primary: accentMain,
// ),
// onPressed: () async => await giftCoupon(),
// child: Text("Extend Time"),
// ),
// ),
],
),
Visibility(
visible: loading,
child: Container(
color: Color.fromRGBO(0, 0, 0, 0.2),
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.width,
child: Center(
child: CupertinoActivityIndicator(
animating: true,
radius: 15,
),
),
),
),
],
),
),
);
}
}