Initial commit: Penyerahan final Source code Tugas Akhir
This commit is contained in:
167
lib/providers/payments_provider.dart
Normal file
167
lib/providers/payments_provider.dart
Normal file
@ -0,0 +1,167 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:initial_folder/models/detail_order_model.dart';
|
||||
import 'package:initial_folder/models/detail_order_model_underscore.dart';
|
||||
import 'package:initial_folder/models/zero_price_model.dart';
|
||||
import 'package:initial_folder/services/payment_service.dart';
|
||||
|
||||
import '../screens/checkout/snap_payment_page.dart';
|
||||
|
||||
enum ResultState { error, success, gagal, loading }
|
||||
|
||||
enum Process { uninitialized, loading }
|
||||
|
||||
class PaymentsProvider with ChangeNotifier {
|
||||
PaymentsProvider({required this.paymentServices});
|
||||
final PaymentServices paymentServices;
|
||||
|
||||
ResultState? _state;
|
||||
Process _stateProcess = Process.uninitialized;
|
||||
bool _paymentModel = false;
|
||||
ZeroPrice? _zeroPrice;
|
||||
String? _idOrders;
|
||||
List<DetailOrderModel> _detailOrder = [];
|
||||
List<DetailOrderModelUnderscore> _detailOrderUnderscore = [];
|
||||
|
||||
ResultState? get state => _state;
|
||||
Process get stateProcess => _stateProcess;
|
||||
bool get result => _paymentModel;
|
||||
String? get idOrders => _idOrders;
|
||||
ZeroPrice? get zeroPrice => _zeroPrice;
|
||||
List<DetailOrderModel> get detailOrder => _detailOrder;
|
||||
List<DetailOrderModelUnderscore> get detailOrderUnderscore => _detailOrderUnderscore;
|
||||
|
||||
String get orderId {
|
||||
if (_detailOrder.isNotEmpty) {
|
||||
return _detailOrder[0].idOrder;
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
set selectedIdOrders(String value) {
|
||||
_idOrders = value;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
// mulai Snap Payment
|
||||
Future<Map<String, String>?> startSnapPayment({
|
||||
required String orderId,
|
||||
required int grossAmount,
|
||||
required List<Map<String, dynamic>> dataInvoice,
|
||||
}) async {
|
||||
try {
|
||||
_stateProcess = Process.loading;
|
||||
notifyListeners();
|
||||
|
||||
Map<String, String> transactionToken = await paymentServices.getSnapTransactionToken(
|
||||
orderId: orderId,
|
||||
grossAmount: grossAmount,
|
||||
dataInvoice: dataInvoice,
|
||||
);
|
||||
|
||||
if (transactionToken.isNotEmpty) {
|
||||
_stateProcess = Process.uninitialized;
|
||||
_state = ResultState.success;
|
||||
print('Transaction token didapatkan: $transactionToken');
|
||||
notifyListeners();
|
||||
return transactionToken;
|
||||
} else {
|
||||
_state = ResultState.gagal;
|
||||
_stateProcess = Process.uninitialized;
|
||||
notifyListeners();
|
||||
return null;
|
||||
}
|
||||
} catch (e) {
|
||||
print('Error Snap Payment -> $e');
|
||||
_state = ResultState.error;
|
||||
_stateProcess = Process.uninitialized;
|
||||
notifyListeners();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Map<String, String>> getSnapTransactionToken({
|
||||
required String orderId,
|
||||
required int grossAmount,
|
||||
required List<Map<String, dynamic>> dataInvoice,
|
||||
}) async {
|
||||
return await paymentServices.getSnapTransactionToken(
|
||||
orderId: orderId,
|
||||
grossAmount: grossAmount,
|
||||
dataInvoice: dataInvoice,
|
||||
);
|
||||
}
|
||||
|
||||
// kursus gratis
|
||||
Future<bool> freeCourse(int _idCourse) async {
|
||||
try {
|
||||
_stateProcess = Process.loading;
|
||||
notifyListeners();
|
||||
bool result = await paymentServices.freeCoure(_idCourse);
|
||||
if (result) {
|
||||
_stateProcess = Process.uninitialized;
|
||||
_state = ResultState.success;
|
||||
notifyListeners();
|
||||
return true;
|
||||
} else {
|
||||
_state = ResultState.gagal;
|
||||
_stateProcess = Process.uninitialized;
|
||||
notifyListeners();
|
||||
return false;
|
||||
}
|
||||
} catch (e) {
|
||||
print('Error -> $e');
|
||||
_state = ResultState.error;
|
||||
_stateProcess = Process.uninitialized;
|
||||
notifyListeners();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// kursus dengan kupon gratis
|
||||
Future<bool> freeCourseCoupon(int _idCourse, String coupon) async {
|
||||
try {
|
||||
_stateProcess = Process.loading;
|
||||
notifyListeners();
|
||||
bool result = await paymentServices.freeCoureCoupon(_idCourse, coupon);
|
||||
if (result) {
|
||||
_stateProcess = Process.uninitialized;
|
||||
_state = ResultState.success;
|
||||
notifyListeners();
|
||||
return true;
|
||||
} else {
|
||||
_state = ResultState.gagal;
|
||||
_stateProcess = Process.uninitialized;
|
||||
notifyListeners();
|
||||
return false;
|
||||
}
|
||||
} catch (e) {
|
||||
print('Error -> $e');
|
||||
_state = ResultState.error;
|
||||
_stateProcess = Process.uninitialized;
|
||||
notifyListeners();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//pembayaran dengan harga 0 (ZeroPrice)
|
||||
Future<dynamic> zeroPayment(List<Map<String, String>> dataInvoice, String totalPayment) async {
|
||||
try {
|
||||
notifyListeners();
|
||||
var result = await paymentServices.zeroPayment(
|
||||
dataInvoice: dataInvoice, totalPayment: totalPayment);
|
||||
if (result.isNotEmpty) {
|
||||
notifyListeners();
|
||||
return true;
|
||||
} else {
|
||||
notifyListeners();
|
||||
return false;
|
||||
}
|
||||
} catch (e) {
|
||||
print('Error -> $e');
|
||||
notifyListeners();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user