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.
 
 

587 lines
30 KiB

import 'dart:math';
import 'package:flutter/material.dart';
import 'package:teso/Classes/API Clasess/ProximityCoupon.dart';
import 'package:provider/provider.dart';
import 'package:teso/Classes/CouponRateCalculator.dart';
import 'package:teso/providers/user_provider.dart';
import 'package:teso/Classes/API Clasess/CouponHead.dart';
import 'package:page_transition/page_transition.dart';
import 'package:teso/Pages/productView.dart';
import 'package:teso/Classes/API Clasess/CouponDetails.dart';
import 'package:teso/Classes/API Clasess/Product.dart';
import 'package:teso/util/SizeConfig.dart';
import 'package:teso/util/consts.dart';
Positioned buildActiveDiscountCoupon(
ProximityCoupon img,
double bottom,
double right,
double left,
double cardWidth,
double rotation,
double skew,
BuildContext context,
Function dismissImg,
int flag,
Function addImg,
Function swipeRight,
Function swipeLeft,
double worth,
Function calWorth) {
SizeConfig().init(context);
if (worth < img.lowerLimit) {
worth = img.lowerLimit;
}
return new Positioned(
bottom: bottom,
right: flag == 0
? right != 0.0
? right
: null
: null,
left: flag == 1
? right != 0.0
? right
: null
: null,
child: new Dismissible(
key: new Key(new Random().toString()),
crossAxisEndOffset: -0.3,
onResize: () {},
onDismissed: (DismissDirection direction) {
if (direction == DismissDirection.endToStart)
dismissImg(img);
else
addImg(img);
},
child: new Transform(
alignment: flag == 0 ? Alignment.bottomRight : Alignment.bottomLeft,
transform: new Matrix4.skewX(skew),
child: new RotationTransition(
turns: new AlwaysStoppedAnimation(
flag == 0 ? rotation / 360 : -rotation / 360),
child: Column(
children: [
new Wrap(
children: [
InkWell(
onTap: () async {
CouponsHead head = new CouponsHead();
head.businessId = img.business.businessId;
head.couponId = img.couponId;
head.expiration = img.expiration;
head.lower = img.lowerLimit;
head.upper = img.upperLimit;
head.quantity = img.quantity;
head.state = img.state;
head.targetProduct = img.targetID;
head.type = img.type;
CouponDetails details = new CouponDetails();
details.businessId = img.business.businessId;
details.countID = "null";
details.couponId = img.couponId;
details.expiration = img.expiration;
details.issuer = img.business;
details.lowerLimit = img.lowerLimit;
details.upperLimit = img.upperLimit;
details.quantity = img.quantity;
details.state = img.state;
details.type = img.type;
details.targetProduct = new Product();
details.targetProduct.businessID = details.businessId;
details.targetProduct.productImage = img.targetImage;
details.targetProduct.productName = img.targetName;
details.targetProduct.unitPrice = img.targetCost;
details.targetProduct.productDesc = img.tagretDescription;
await Provider.of<UserProvider>(context, listen: false)
.viewCoupon(head);
Navigator.push(
context,
PageTransition(
type: PageTransitionType.rightToLeft,
child: ProductView(
couponDetails: details,
),
),
);
},
child: Container(
width: (MediaQuery.of(context).size.width * 0.75),
height: MediaQuery.of(context).size.height * 0.65,
margin: EdgeInsets.only(
left: MediaQuery.of(context).size.width * 0.12,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(20),
bottomRight: Radius.circular(20),
topLeft: Radius.circular(20),
topRight: Radius.circular(20),
),
color: Colors.white,
),
child: ClipRRect(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(20),
bottomRight: Radius.circular(20),
topLeft: Radius.circular(20),
topRight: Radius.circular(20),
),
child: Material(
elevation: 5.0,
child: Container(
width: (MediaQuery.of(context).size.width * 0.75),
height: MediaQuery.of(context).size.height * 0.68,
color: Colors.white,
child: Column(
children: [
Container(
width: (MediaQuery.of(context).size.width *
0.75),
height:
MediaQuery.of(context).size.height * 0.50,
padding: EdgeInsets.all(8.0),
decoration: BoxDecoration(
color: Colors.white,
image: img.upperLimit < 50.1
? DecorationImage(
fit: BoxFit.fill,
image: AssetImage(
"assets/images/blue.png"),
colorFilter: new ColorFilter.mode(
Color(0xFF0031ed)
.withOpacity(1.0),
BlendMode.multiply),
)
: DecorationImage(
fit: BoxFit.fill,
image: AssetImage(
"assets/images/redBack.png"),
colorFilter: new ColorFilter.mode(
Colors.red.withOpacity(1.0),
BlendMode.multiply),
),
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(80),
bottomRight: Radius.circular(80),
),
),
child: Stack(
children: [
Align(
alignment: Alignment.topLeft,
child: Row(
children: [
Image(
width: 30,
image: AssetImage(
"assets/images/tesoCouponInsignia.png")),
SizedBox(
width: 5,
),
Text(
"TESO",
style: TextStyle(
color: Colors.white,
fontSize: 15),
),
],
),
),
Align(
alignment: Alignment.topCenter,
child: Container(
margin: EdgeInsets.only(
top: MediaQuery.of(context)
.size
.width *
0.125,
),
child: Column(
children: [
Text(
img.business.businessName,
style: TextStyle(
color: Colors.white,
fontSize: 18,
fontWeight: FontWeight.w700,
),
),
Container(
width: double.infinity,
margin: EdgeInsets.symmetric(
vertical: 10,
),
child: Center(
child: Text(
"VOUCHER",
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,
fontSize: 25,
fontWeight:
FontWeight.w900,
),
),
),
),
],
),
),
),
Align(
alignment: Alignment.center,
child: Container(
height:
SizeConfig.safeBlockVertical * 10,
padding: EdgeInsets.all(4.5),
decoration: BoxDecoration(
border: Border.all(
color: Colors.white)),
child: Column(
children: [
Text(
"ORIGINAL PRICE : GH¢ " +
img.targetCost
.toStringAsFixed(2),
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: SizeConfig
.safeBlockHorizontal *
3,
),
),
Text(
"DISCOUNTED PRICE : GH¢ " +
(img.targetCost -
(img.targetCost *
(worth / 100)))
.toStringAsFixed(2),
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: SizeConfig
.safeBlockHorizontal *
3,
),
),
new Wrap(
direction: Axis.horizontal,
children: [
Image(
width: SizeConfig
.safeBlockHorizontal *
5,
image: AssetImage(
"assets/images/silver1.png"),
),
Container(
margin: EdgeInsets.only(
top: 5,
),
child: Text(
"SILVER COIN COST : ",
style: TextStyle(
color: Colors.white,
fontWeight:
FontWeight.bold,
fontSize: SizeConfig
.safeBlockHorizontal *
3,
),
),
),
Container(
margin: EdgeInsets.only(
top: 5,
),
child: Text(
CouponRateCalculator
.getRate(
img.targetCost *
(worth /
100))
.toString(),
style: TextStyle(
color: Colors.white,
fontWeight:
FontWeight.bold,
fontSize: SizeConfig
.safeBlockHorizontal *
3,
),
),
),
],
),
],
),
),
),
Align(
alignment: Alignment.bottomCenter,
child: Container(
margin: EdgeInsets.symmetric(
vertical: MediaQuery.of(context)
.size
.width *
0.15),
child: Text(
img.targetName.toUpperCase(),
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
),
],
),
),
Container(
padding: EdgeInsets.symmetric(
horizontal:
MediaQuery.of(context).size.width *
0.010,
),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Container(
width:
MediaQuery.of(context).size.width *
0.4,
height: 70,
padding: EdgeInsets.only(
top: 5,
),
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Column(
children: [
Container(
child: Text(
"Pay : GH¢ " +
(img.targetCost -
(img.targetCost *
(worth /
100)))
.toStringAsFixed(2) +
" only",
style: TextStyle(
color: Colors.red,
fontWeight: FontWeight.bold,
),
),
),
img.condition == 'none'
? Container()
: Container(
child: Text(
"Condition : " +
img.condition
.replaceAll(
'"', ""),
),
),
],
),
),
),
Container(
width: 65,
height: 65,
padding: EdgeInsets.all(2.5),
decoration: BoxDecoration(
border: Border.all(
color: Colors.red,
),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(80),
topRight: Radius.circular(80),
bottomLeft: Radius.circular(80),
bottomRight: Radius.circular(80),
),
),
child: Container(
width: 65,
height: 65,
padding: EdgeInsets.all(2.5),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.red,
border:
Border.all(color: Colors.red),
image: DecorationImage(
fit: BoxFit.fill,
image: AssetImage(
"assets/images/red.png"),
colorFilter: new ColorFilter.mode(
Colors.red.withOpacity(0.5),
BlendMode.overlay),
),
),
child: Center(
child: Wrap(
children: [
Text(
worth.toString() + "%",
style: TextStyle(
color: Colors.white,
fontSize: 18.5,
fontWeight: FontWeight.bold,
),
),
Container(
margin: EdgeInsets.only(
left: 22,
),
child: Text(
"OFF",
textAlign: TextAlign.end,
style: TextStyle(
color: Colors.white,
fontWeight:
FontWeight.w900,
),
),
),
],
),
),
),
),
],
),
),
],
),
),
),
),
),
),
Container(
// width: SizeConfig.safeBlockHorizontal * 0.1,
height: SizeConfig.safeBlockVertical * 60,
padding: EdgeInsets.all(SizeConfig.safeBlockVertical * 2),
child: Center(
child: new Column(
children: [
Container(
child: Text(
img.upperLimit.toString() + " %",
textAlign: TextAlign.center,
style: TextStyle(
foreground: Paint()
..style = PaintingStyle.stroke
..strokeWidth = 1
..color = Colors.blue,
),
),
),
Container(
height: SizeConfig.safeBlockVertical * 50,
child: new RotatedBox(
quarterTurns: 3,
child: Slider(
value: worth,
min: img.lowerLimit,
max: img.upperLimit,
divisions: 20,
activeColor: accentMain,
inactiveColor: darkAccent,
label: worth.toString() + "%",
onChanged: (double newValue) =>
calWorth(newValue),
),
),
),
Container(
child: Text(
img.lowerLimit.toString() + " %",
textAlign: TextAlign.center,
style: TextStyle(
foreground: Paint()
..style = PaintingStyle.stroke
..strokeWidth = 1
..color = Colors.blue,
),
),
),
],
),
),
),
],
),
SizedBox(
height: 20,
),
new Wrap(
alignment: WrapAlignment.center,
runSpacing: 10,
spacing: 10,
crossAxisAlignment: WrapCrossAlignment.center,
children: <Widget>[
new ElevatedButton(
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(18.0),
),
primary: Colors.red[200],
padding: new EdgeInsets.all(10.0),
),
onPressed: () => swipeLeft(img),
child: new Container(
height: 30.0,
width: 100.0,
alignment: Alignment.center,
decoration: new BoxDecoration(
color: Colors.red[200],
borderRadius: new BorderRadius.circular(60.0),
),
child: new Text(
"Not Interested",
style: new TextStyle(color: Colors.white),
),
),
),
new ElevatedButton(
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(18.0),
),
primary: Colors.green,
padding: new EdgeInsets.all(10.0),
),
onPressed: () => swipeRight(img),
child: new Container(
height: 30.0,
width: 100.0,
alignment: Alignment.center,
decoration: new BoxDecoration(
color: Colors.green,
borderRadius: new BorderRadius.circular(60.0),
),
child: new Text(
"Interested",
style: new TextStyle(color: Colors.white),
),
),
),
],
)
],
),
),
),
),
);
}