Skip to content

Commit

Permalink
Improved payment result class
Browse files Browse the repository at this point in the history
  • Loading branch information
Robert-SD committed Oct 10, 2023
1 parent 30f0fce commit 27cd50f
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 50 deletions.
21 changes: 15 additions & 6 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -186,20 +186,29 @@ class _MyAppState extends State<MyApp> {
);
}


_dialogBuilder(BuildContext context, PaymentResult paymentResult) {
String title = "";
String message = "";
if (paymentResult.result != null) {
message = "Result code: ${paymentResult.result?.resultCode}";
} else {
message = "Error: ${paymentResult.reason}";
switch (paymentResult) {
case PaymentAdvancedFlowFinished():
title = "Finished";
message = "Result code: ${paymentResult.resultCode}";
case PaymentSessionFinished():
title = "Finished";
message = "Result code: ${paymentResult.resultCode}";
case PaymentCancelledByUser():
title = "Cancelled by user";
message = "Drop-in cancelled manually by user";
case PaymentError():
title = "Error occurred";
message = "${paymentResult.reason}";
}

return showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text(paymentResult.type.name),
title: Text(title),
content: Text(message),
actions: <Widget>[
TextButton(
Expand Down
40 changes: 31 additions & 9 deletions lib/src/adyen_checkout.dart
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,26 @@ class AdyenCheckout implements AdyenCheckoutInterface {
}
});

return dropInSessionCompleter.future.then((value) {
return dropInSessionCompleter.future.then((paymentResultDTO) {
AdyenCheckoutPlatformInterface.instance.cleanUpDropIn();
_resultApi.dropInSessionPlatformCommunicationStream.close();
_adyenLogger.print("Drop-in session result type: ${value.type.name}");
_adyenLogger
.print("Drop-in session result code: ${value.result?.resultCode}");
return value.fromDTO();
.print("Drop-in session result type: ${paymentResultDTO.type.name}");
_adyenLogger.print(
"Drop-in session result code: ${paymentResultDTO.result?.resultCode}");
switch (paymentResultDTO.type) {
case PaymentResultEnum.cancelledByUser:
return PaymentCancelledByUser();
case PaymentResultEnum.error:
return PaymentError(reason: paymentResultDTO.reason);
case PaymentResultEnum.finished:
return PaymentSessionFinished(
sessionId: paymentResultDTO.result?.sessionId ?? "",
sessionData: paymentResultDTO.result?.sessionData ?? "",
resultCode: paymentResultDTO.result?.resultCode ?? "",
order: paymentResultDTO.result?.order?.fromDTO(),
);
}
});
}

Expand Down Expand Up @@ -168,14 +181,23 @@ class AdyenCheckout implements AdyenCheckoutInterface {
}
});

return dropInAdvancedFlowCompleter.future.then((value) {
return dropInAdvancedFlowCompleter.future.then((paymentResultDTO) {
AdyenCheckoutPlatformInterface.instance.cleanUpDropIn();
_resultApi.dropInAdvancedFlowPlatformCommunicationStream.close();
_adyenLogger
.print("Drop-in advanced flow result type: ${value.type.name}");
_adyenLogger.print(
"Drop-in advanced flow result code: ${value.result?.resultCode}");
return value.fromDTO();
"Drop-in advanced flow result type: ${paymentResultDTO.type.name}");
_adyenLogger.print(
"Drop-in advanced flow result code: ${paymentResultDTO.result?.resultCode}");
switch (paymentResultDTO.type) {
case PaymentResultEnum.cancelledByUser:
return PaymentCancelledByUser();
case PaymentResultEnum.error:
return PaymentError(reason: paymentResultDTO.reason);
case PaymentResultEnum.finished:
return PaymentAdvancedFlowFinished(
resultCode: paymentResultDTO.result?.resultCode ?? "",
);
}
});
}

Expand Down
40 changes: 22 additions & 18 deletions lib/src/models/payment_result.dart
Original file line number Diff line number Diff line change
@@ -1,27 +1,31 @@
import 'package:adyen_checkout/adyen_checkout.dart';

class PaymentResult {
final PaymentResultEnum type;
final String? reason;
final PaymentResultModel? result;
sealed class PaymentResult {}

class PaymentAdvancedFlowFinished extends PaymentResult {
final String resultCode;

PaymentResult(
this.type,
this.reason,
this.result,
);
PaymentAdvancedFlowFinished({required this.resultCode});
}

class PaymentResultModel {
final String? sessionId;
final String? sessionData;
final String? resultCode;
class PaymentSessionFinished extends PaymentResult {
final String sessionId;
final String sessionData;
final String resultCode;
final OrderResponse? order;

PaymentResultModel(
this.sessionId,
this.sessionData,
this.resultCode,
PaymentSessionFinished({
required this.sessionId,
required this.sessionData,
required this.resultCode,
this.order,
);
});
}

class PaymentCancelledByUser extends PaymentResult {}

class PaymentError extends PaymentResult {
final String? reason;

PaymentError({required this.reason});
}
34 changes: 17 additions & 17 deletions lib/src/utils/dto_mapper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -68,23 +68,23 @@ extension AmountMapper on Amount {
currency: currency,
);
}

extension PaymentResultMapper on PaymentResultDTO {
PaymentResult fromDTO() => PaymentResult(
type,
reason,
result?.fromDTO(),
);
}

extension PaymentResulModelMapper on PaymentResultModelDTO {
PaymentResultModel fromDTO() => PaymentResultModel(
sessionId,
sessionData,
resultCode,
order?.fromDTO(),
);
}
//
// extension PaymentResultMapper on PaymentResultDTO {
// PaymentResult fromDTO() => PaymentResult(
// type,
// reason,
// result?.fromDTO(),
// );
// }
//
// extension PaymentResulModelMapper on PaymentResultModelDTO {
// PaymentResultModel fromDTO() => PaymentResultModel(
// sessionId,
// sessionData,
// resultCode,
// order?.fromDTO(),
// );
// }

extension OrderResponseMapper on OrderResponseDTO {
OrderResponse fromDTO() => OrderResponse(
Expand Down

0 comments on commit 27cd50f

Please sign in to comment.