import 'package:flutter/material.dart'; import 'package:teso/Classes/API Clasess/CouponHead.dart'; import 'package:provider/provider.dart'; import 'package:teso/Classes/CouponRateCalculator.dart'; import 'package:teso/providers/device_provider.dart'; import 'package:teso/util/consts.dart'; class AcquireCoupon extends StatefulWidget { final CouponsHead? head; final double? price; const AcquireCoupon({Key? key, this.head, this.price}) : super(key: key); @override _AcquireCouponState createState() => _AcquireCouponState(head: this.head); } class _AcquireCouponState extends State { final CouponsHead? head; _AcquireCouponState({this.head}); double? _value; int _n = 1; int coinCost = 0; changeValue(val) { setState(() { _value = val; }); calcCost(); } calcCost() { double price = widget.price! * (_value! / 100); coinCost = CouponRateCalculator.getRate(price); coinCost = coinCost * _n; } @override void initState() { _value = head!.lower; calcCost(); super.initState(); } void add() { setState(() { _n++; }); calcCost(); } void minus() { setState(() { if (_n != 1) _n--; }); calcCost(); } @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: new Wrap(children: [ new Container( width: double.infinity, margin: EdgeInsets.only( top: 20.0, bottom: 12.0, ), child: Center( child: Text( "ACQUIRE COUPON", style: TextStyle( fontSize: 20.0, ), ), )), Padding( padding: const EdgeInsets.symmetric(horizontal: 20.0), child: Divider(), ), new ListTile( title: new Container( child: new Center( child: new Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Text("Quantity"), new Container( width: 30, height: 30, child: new FloatingActionButton( onPressed: minus, child: Text( "-", style: TextStyle( fontSize: 25, color: Colors.black, ), ), backgroundColor: Colors.white, ), ), new Text('$_n', style: new TextStyle(fontSize: 20.0)), new Container( width: 30, height: 30, child: new FloatingActionButton( onPressed: add, child: new Icon( Icons.add, color: Colors.black, size: 20, ), backgroundColor: Colors.white, ), ), ], ), ), ), ), Container( child: head!.type!.toLowerCase().contains("freebie") ? Center( child: Text("Coupon Type : FREEBIE"), ) : Row( children: [ Text(head!.lower.toString() + " %"), Slider( value: _value!, min: head!.lower!, max: head!.upper!, divisions: 20, activeColor: accentMain, inactiveColor: darkAccent, label: _value.toString() + "%", onChanged: (double newValue) => changeValue(newValue), ), Text(head!.upper.toString() + " %"), ], ), ), Center( child: Wrap( direction: Axis.horizontal, children: [ Container( child: Container( height: 40.0, width: 40.0, decoration: new BoxDecoration( shape: BoxShape.circle, ), child: Container( width: 40, height: 40, decoration: 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: 40, width: 40, fit: BoxFit.fill, image: AssetImage("assets/images/silver1.png"), ), ), ), ), ), Container( width: 40, height: 40, child: Center( child: Text( coinCost.toString(), style: TextStyle( fontSize: 20, fontWeight: FontWeight.bold, ), ), ), ), ], ), ), new ListTile( title: new ElevatedButton( style: ElevatedButton.styleFrom( primary: accentMain, shape: RoundedRectangleBorder( borderRadius: BorderRadius.all( Radius.circular(20.0), ), ), ), onPressed: coinCost == 0 ? null : () async { head!.lower = _value; head!.quantity = _n; await Provider.of(context, listen: false) .acceptCoupon(head!, coinCost, context); }, child: Text("Confirm"), ), onTap: () => {}, ), ]), ), ); } }