Files
checker/lib/screens/purchase_success.dart

184 lines
5.1 KiB
Dart

import 'package:checker/base/base_state.dart';
import 'package:checker/common.dart';
import 'package:checker/consts.dart';
import 'package:checker/db.dart';
import 'package:checker/screens/purchase_sum.dart';
import 'package:checker/strings.dart';
import 'package:flutter/material.dart';
/// Экран проведения покупки.
class PurchaseSuccessScreen extends StatefulWidget {
PurchaseSuccessScreen(this.val, this.name, this.helper, this.app, this.details, this.coupons);
final String val;
final String name;
final String app;
final SqliteHelper helper;
final Map details;
final List<dynamic> coupons;
@override State createState() =>
new PurchaseSuccessScreenState(val, name, helper, app, details, coupons);
}
class PurchaseSuccessScreenState<T> extends BaseState<PurchaseSuccessScreen> {
PurchaseSuccessScreenState(
String sum, String username, SqliteHelper helper,
String app, Map details, List<dynamic> coupons
) : super(helper, app) {
this.sum = sum;
this.username = username;
this.details = details;
this.coupons = coupons;
}
String sum, username;
Map details;
List<dynamic> coupons;
int bonusPlus = 0;
int bonusMinus = 0;
int currency;
String token;
bool showBonus;
bool isAutomaticallyImplyLeading() => false;
@override String getTitle() {
return StringsLocalization.carryingPurchase();
}
@override String getHintString() {
return null;
}
@override
void initState() {
helper.getCurrency().then((currency) {
helper.getToken().then((token) {
setState(() {
this.currency = currency;
this.token = token;
});
});
});
super.initState();
}
@override Widget build(BuildContext context) {
if (this.details['sum_bonus'] is String) {
String regexString = r'(\d+) начислено, (\d+).*';
RegExp regExp = new RegExp(regexString);
var matches = regExp.allMatches(this.details['sum_bonus']);
if(matches.length != 0) {
var match = matches.elementAt(0); // => extract the first (and only) match
this.bonusPlus = int.parse(match.group(1));
this.bonusMinus = int.parse(match.group(2));
}
}
if (this.details['sum_bonus'] is int) {
this.bonusPlus = this.details['sum_bonus'];
}
return getMainWidget();
}
@override Widget getScreenContent() {
List <Widget> widgetList = <Widget>[];
widgetList.add(getValueWithDescription(StringsLocalization.buyer(), username));
widgetList.add(getSuccessMessage());
if (app != 'crypto' || app != 'racib') {
if (bonusPlus > 0) {
widgetList.add(getValueWithDescription(StringsLocalization.bonusPlus(), bonusPlus.toString()));
}
}
if (bonusMinus > 0) {
widgetList.add(getValueWithDescription(StringsLocalization.bonusMinus(), bonusMinus.toString()));
}
if (app != 'autobonus') {
widgetList.add(getValueWithDescription(StringsLocalization.discountRate(), '${details['discount']}%'));
if (app != 'crypto' || app != 'racib') {
widgetList.add(getValueWithDescription(StringsLocalization.discountSum(), '${details['sum_discount']}'));
}
}
if ((app != 'crypto' || app != 'racib') && this.coupons.length > 0) {
widgetList.add(getItemTitle(StringsLocalization.couponsUsed()));
this.coupons.forEach((couponItem) {
widgetList.add(getItemToggle(
couponItem['offer_name'],
couponItem['coupon_condition']
));
});
}
widgetList.add(wrapButton(getScreenMargins(174.0), getScanButton()));
return new ListView.builder(
itemBuilder: (BuildContext context, int index) => widgetList[index],
itemCount: widgetList.length
);
}
getScreenMargins(double bottom) {
double side = 42.0;
return new EdgeInsets.only(bottom: bottom, left: side, right: side);
}
getScanButton() {
String title = StringsLocalization.scan();
return buildRaisedButton(title,
() => Navigator.pushAndRemoveUntil(context,
MaterialPageRoute(builder: (context) =>
PurchaseSumScreen(widget.helper, widget.app, token)),
(route) => false));
}
ExpansionPanelHeaderBuilder get headerBuilder {
return (BuildContext context, bool isExpanded) {
return new Text('Purchase details');
};
}
getSuccessMessage() {
return new Row(
children: <Widget>[
new Expanded(child: new Container(
margin: new EdgeInsets.only(top: 20.0), height: 64.0,
decoration: new BoxDecoration(color: greenBackground),
child: new Center(
child: new Text(
getMessageTitle(), textAlign: TextAlign.center,
style: new TextStyle(
fontWeight: FontWeight.bold,
color: tokenActiveTextColor
)
)
)
))
]
);
}
getMessageTitle() {
if (currency != null) {
if (app != 'crypto' || app != 'racib') {
return StringsLocalization.paymentCompleted(sum, currency);
} else {
return StringsLocalization.purchaseCompleted(sum, currency);
}
} else {
return '';
}
}
}