import 'package:aman_kassa_flutter/core/locator.dart'; import 'package:aman_kassa_flutter/core/models/calc_model.dart'; import 'package:aman_kassa_flutter/core/models/product_dao.dart'; import 'package:aman_kassa_flutter/core/models/response.dart'; import 'package:aman_kassa_flutter/core/route_names.dart'; import 'package:aman_kassa_flutter/core/services/DataService.dart'; import 'package:aman_kassa_flutter/core/services/dialog_service.dart'; import 'package:aman_kassa_flutter/core/services/navigator_service.dart'; import 'package:aman_kassa_flutter/redux/constants/operation_const.dart'; import 'package:aman_kassa_flutter/redux/constants/setting_const.dart'; import 'package:aman_kassa_flutter/redux/state/calc_state.dart'; import 'package:aman_kassa_flutter/redux/state/kassa_state.dart'; import 'package:aman_kassa_flutter/redux/store.dart'; import 'package:aman_kassa_flutter/shared/app_colors.dart'; import 'package:aman_kassa_flutter/shared/ui_helpers.dart'; import 'package:aman_kassa_flutter/views/check/image_show_container.dart'; import 'package:aman_kassa_flutter/widgets/components/calculator/calculator.dart'; import 'package:aman_kassa_flutter/widgets/fields/busy_button.dart'; import 'package:aman_kassa_flutter/widgets/loader/Dialogs.dart'; import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; class PaymentView extends StatefulWidget { final PaymentModel model; const PaymentView({Key key, this.model}) : super(key: key); @override _PaymentViewState createState() => _PaymentViewState(); } class _PaymentViewState extends State { final GlobalKey _keyLoader = new GlobalKey(); final DataService _dataService = locator(); final DialogService _dialogService = locator(); final NavigatorService _navigatorService = locator(); bool isBusy; @override void initState() { // TODO: implement initState super.initState(); isBusy = false; } @override Widget build(BuildContext context) { return WillPopScope( onWillPop: () { if (!isBusy) Navigator.pop(context); return new Future(() => false); }, child: Scaffold( appBar: AppBar( backgroundColor: whiteColor, elevation: 0, leading: IconButton(icon: Icon(Icons.arrow_back_ios), color: Colors.black87, onPressed: () => Navigator.pop(context),), title: Text(dataTitle(), style: TextStyle(color: Colors.black87),), ), body: Container( padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 12.0 ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(dataText() , style: TextStyle(fontWeight: FontWeight.bold, color: Colors.black26, fontSize: 15 ),), buildStoreConnector(), verticalSpaceLarge, _buildBodyContent(), ], ), ), ), ); } String dataTitle() => widget.model.operationType == OperationTypePay ? 'Оплата' : 'Возврат'; String dataText() => widget.model.operationType == OperationTypePay ? 'К оплате' : 'К возврату'; StoreConnector buildStoreConnector() { if(widget.model.mode == SettingModeCalc) { return StoreConnector( converter: (store) => store.state.calcState, builder: (context, vm) { return Text('${totalCalc(vm.calcItems)} тнг', style: TextStyle( fontWeight: FontWeight.bold, color: Colors.black87, fontSize: 35)); } ); } return StoreConnector( converter: (store) => store.state.kassaState, builder: (context, vm) { return Text('${totalKassa(vm.kassaItems)} тнг', style: TextStyle(fontWeight: FontWeight.bold, color: Colors.black87, fontSize: 35 )); } ); } Expanded _buildBodyContent() { return Expanded( child: Column( children: [ Container( height: 150, child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Expanded(child: BusyButton(title: 'Оплатить картой', onPressed:() { pressPayment('card');}, mainColor: greenColor,)), horizontalSpaceSmall, Expanded(child: BusyButton(title: 'Наличными', onPressed:() { pressPayment('cash');}, mainColor: primaryColor,)), ], ), ), verticalSpaceLarge, Expanded(child: Container(),), Container(child: BusyButton(title: 'Отмена', onPressed:() { Navigator.pop(context);} , mainColor: redColor,)), ], ), ); } pressPayment(String type) async { setState(() { isBusy = true; }); Dialogs.showLoadingDialog(context, _keyLoader); try { AppState _state = Redux.store.state; String _token = _state.userState.user.token; String _tradeType = _state.settingState.tradeType; List items = _state.kassaState.kassaItems; Response response = await _dataService.sellOrReturn(token: _token, items: items, paymentType: type, operationType: widget.model.operationType, tradeType: _tradeType ); Navigator.of(context, rootNavigator: true).pop(); setState(() { isBusy = false; }); if(response.operation){ String message = response.body['message']; String check = response.body['check']; _navigatorService.pop(); _navigatorService.push(ImageShowRoute, arguments: ImageShowModel(check, message)); } else if(!response.operation && response.status !=500) { _dialogService.showDialog(description: response.body['message']); } } catch(e) { //Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop(); Navigator.of(context, rootNavigator: true).pop(); setState(() { isBusy = false; }); } } String totalKassa(List kassaItems) { num total = 0.0; kassaItems.forEach((element) { total+= element.total == null ? 0.0 : element.total.toDouble(); }); return total.toString(); } String totalCalc(List items) { num total = 0.0; items.forEach((element) { if(element.operation == Calculations.MULTIPLY) { double num1 = element.num1 == null ? 0.0 : double.parse(element.num1); double num2 = element.num2 == null ? 0.0 : double.parse(element.num2); total += num1 * num2; } else { total+= element.num1 == null ? 0.0 : double.parse(element.num1); } }); return total.toString(); } } class PaymentModel { String operationType; String mode; PaymentModel({this.mode, this.operationType}); }