6177214e-ce7c-49e3-99de-ff9721b26f63 — Commit 3d86cd5c

AuthorMikkel Thygesen<mth@dwarf.dk>
Date2025-02-20 23:33:06 +0100
480: removed payment page from preregistration

Changed files

.../pregistration/bloc/preregistration_cubit.dart  | 86 +---------------------
 .../pregistration/bloc/preregistration_state.dart  | 21 ------
 .../lib/pregistration/components/add_card.dart     | 78 --------------------
 .../pages/prereg_confirmation_page.dart            |  7 --
 .../pregistration/pages/prereg_payment_page.dart   | 55 --------------
 .../pregistration/pregistration_repository.dart    | 30 +++++++-
 .../lib/pregistration/preregistration_flow.dart    |  4 -
 7 files changed, 27 insertions(+), 254 deletions(-)

Diff

diff --git a/comwell_key_app/lib/pregistration/bloc/preregistration_cubit.dart b/comwell_key_app/lib/pregistration/bloc/preregistration_cubit.dart
index 648dfbbf..fc05742e 100644
--- a/comwell_key_app/lib/pregistration/bloc/preregistration_cubit.dart
+++ b/comwell_key_app/lib/pregistration/bloc/preregistration_cubit.dart
@@ -1,27 +1,17 @@
-import 'dart:io';
-import 'package:adyen_checkout/adyen_checkout.dart';
import 'package:bloc/bloc.dart';
-import 'package:comwell_key_app/overview/models/payment_details.dart';
import 'package:comwell_key_app/pregistration/bloc/preregistration_state.dart';
-import 'package:comwell_key_app/pregistration/pregistration_repository.dart';
import 'package:comwell_key_app/pregistration/preregistration_flow.dart';
import 'package:comwell_key_app/profile_settings/repostiory/profile_settings_repository.dart';
-import 'package:comwell_key_app/services/adyen/adyen_amount.dart';
-import 'package:comwell_key_app/services/adyen/stored_payment_method.dart';
-import 'package:comwell_key_app/services/api.dart';
import 'package:comwell_key_app/tracking/comwell_tracking.dart';
import 'package:comwell_key_app/tracking/models/analytics_event_item.dart';
import 'package:comwell_key_app/utils/locator.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
-import 'package:flutter_dotenv/flutter_dotenv.dart';
class PreregistrationCubit extends Cubit<PreregistrationState> {
final _profileSettingsRepository = locator<ProfileSettingsRepository>();
- final _preregistrationRepository = locator<PreregistrationRepository>();
final _tracking = locator<ComwellTracking>();
- final _api = Api();
final pageController = PageController();
final addressTextController = TextEditingController();
@@ -44,15 +34,11 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
emit(state.copyWith(loading: true, error: null));
try {
final user = await _profileSettingsRepository.fetchProfileSettings();
- final paymentMethods =
- await _preregistrationRepository.getPaymentMethods();
if (user != null) {
addressTextController.text = user.address.street;
postalCodeTextController.text = user.address.zipCode;
cityTextController.text = user.address.city;
countryTextController.text = user.address.country;
- emit(state.copyWith(
- loading: false, user: user, storedPaymentMethods: paymentMethods));
} else {
emit(state.copyWith(
loading: false, error: Exception("Der skete en fejl")));
@@ -62,8 +48,6 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
}
}
- void onAddCardClicked() {}
-
void onInformationContinueClicked() {
if (isAddressValid && isPostalCodeValid && isCityValid && isCountryValid) {
_navigateNextPage();
@@ -78,9 +62,6 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
case PreregistrationPage.information:
onInformationContinueClicked();
break;
- case PreregistrationPage.paymentMethod:
- onPaymentMethodsContinueClicked();
- break;
case PreregistrationPage.confirmation:
_onConfirmPressed();
break;
@@ -115,10 +96,6 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
_tracking.trackRemoveFromCart(analyticsEventItem);
}
- void onPaymentMethodsContinueClicked() {
- _navigateNextPage();
- }
-
void _onConfirmPressed() async {
final analyticsEventItem = AnalyticsEventItem(
hotelName: "Comwell",
@@ -145,18 +122,10 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
_navigateTo(PreregistrationPage.information);
}
- void onEditPaymentMethodClicked() {
- _navigateTo(PreregistrationPage.paymentMethod);
- }
-
void onEditExtrasClicked() {
// Not implemented
}
- void onSelectCard(StoredPaymentMethod paymentMethod) {
- emit(state.copyWith(selectedPaymentMethod: paymentMethod));
- }
-
bool onBackClicked() {
if (_isAnimating) return true;
final hasPage = pageController.page != null;
@@ -226,9 +195,6 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
isPostalCodeValid &&
isCityValid &&
isCityValid;
- case PreregistrationPage.paymentMethod:
- return state.termsAndConditionsAccepted &&
- state.selectedPaymentMethod != null;
case PreregistrationPage.confirmation:
return true;
}
@@ -239,7 +205,6 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
final preregPage = PreregistrationPage.fromIndex(page);
switch (preregPage) {
case PreregistrationPage.information:
- case PreregistrationPage.paymentMethod:
return "generic_continue".tr();
case PreregistrationPage.confirmation:
return "generic_confirm".tr();
@@ -249,53 +214,4 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
void onTermsAndConditionsToggled(bool toggle) {
emit(state.copyWith(termsAndConditionsAccepted: toggle));
}
-
- Future<SessionCheckout> sessionCheckout() async {
- final response = await _api.createAdyenSession(AdyenAmount.zeroPayment());
- final id = response["Id"] as String;
- final sessionData = response["SessionData"] as String;
- return AdyenCheckout.session.create(
- sessionId: id,
- sessionData: sessionData,
- configuration: cardComponentConfiguration());
- }
-
- Future<void> onPaymentResult(PaymentResult result) async {
- switch (result) {
- case PaymentAdvancedFinished():
- case PaymentSessionFinished():
- fetchPaymentMethods();
- break;
- case PaymentCancelledByUser():
- print("Session cancelled");
- break;
- case PaymentError():
- print("Session error ${result.reason}");
- break;
- }
- }
-
- void fetchPaymentMethods() async {
- emit(state.copyWith(loading: true, error: null));
- try {
- final paymentMethods =
- await _preregistrationRepository.getPaymentMethods();
- emit(state.copyWith(
- loading: false,
- storedPaymentMethods: paymentMethods,
- ));
- } on Exception catch (e) {
- emit(state.copyWith(error: e));
- }
- }
-
- CardComponentConfiguration cardComponentConfiguration() {
- // TODO: missing endpoint to retrieve client key
- return CardComponentConfiguration(
- environment: Environment.test,
- clientKey: dotenv.env['ADYEN_CLIENT_KEY']!,
- countryCode: Locale(Platform.localeName).languageCode,
- cardConfiguration: const CardConfiguration(),
- );
- }
-}
+}
\ No newline at end of file
diff --git a/comwell_key_app/lib/pregistration/bloc/preregistration_state.dart b/comwell_key_app/lib/pregistration/bloc/preregistration_state.dart
index f2fd1b1a..f6088e0e 100644
--- a/comwell_key_app/lib/pregistration/bloc/preregistration_state.dart
+++ b/comwell_key_app/lib/pregistration/bloc/preregistration_state.dart
@@ -1,5 +1,3 @@
-import 'package:comwell_key_app/services/adyen/payment_method.dart';
-import 'package:comwell_key_app/services/adyen/stored_payment_method.dart';
import 'package:equatable/equatable.dart';
import '../../profile_settings/model/user.dart';
@@ -12,9 +10,6 @@ class PreregistrationState extends Equatable {
final bool missingInformation;
final int numOfExtras;
final int extrasTotalPrice;
- final Iterable<StoredPaymentMethod> storedPaymentMethods;
- final Iterable<PaymentMethod> availablePaymentMethods;
- final StoredPaymentMethod? selectedPaymentMethod;
final bool termsAndConditionsAccepted;
const PreregistrationState({
@@ -22,10 +17,7 @@ class PreregistrationState extends Equatable {
this.missingInformation = false,
this.numOfExtras = 0,
this.extrasTotalPrice = 0,
- this.storedPaymentMethods = const [],
- this.selectedPaymentMethod,
this.termsAndConditionsAccepted = false,
- this.availablePaymentMethods = const [],
this.forceUpdate = false,
this.user,
this.error,
@@ -39,11 +31,8 @@ class PreregistrationState extends Equatable {
missingInformation,
numOfExtras,
extrasTotalPrice,
- selectedPaymentMethod,
- storedPaymentMethods,
termsAndConditionsAccepted,
forceUpdate,
- availablePaymentMethods
];
PreregistrationState copyWith({
@@ -53,13 +42,8 @@ class PreregistrationState extends Equatable {
bool? missingInformation,
int? numOfExtras,
int? extrasTotalPrice,
- String? paymentMethodName,
- String? paymentMethodLastFourDigits,
String? buttonTextStringId,
bool? termsAndConditionsAccepted,
- Iterable<PaymentMethod>? availablePaymentMethods,
- Iterable<StoredPaymentMethod>? storedPaymentMethods,
- StoredPaymentMethod? selectedPaymentMethod,
bool forceUpdate = false,
}) {
return PreregistrationState(
@@ -68,13 +52,8 @@ class PreregistrationState extends Equatable {
missingInformation: missingInformation ?? this.missingInformation,
user: user ?? this.user,
numOfExtras: numOfExtras ?? this.numOfExtras,
- storedPaymentMethods: storedPaymentMethods ?? this.storedPaymentMethods,
- availablePaymentMethods:
- availablePaymentMethods ?? this.availablePaymentMethods,
termsAndConditionsAccepted:
termsAndConditionsAccepted ?? this.termsAndConditionsAccepted,
- selectedPaymentMethod:
- selectedPaymentMethod ?? this.selectedPaymentMethod,
extrasTotalPrice: extrasTotalPrice ?? this.extrasTotalPrice,
error: error);
}
diff --git a/comwell_key_app/lib/pregistration/components/add_card.dart b/comwell_key_app/lib/pregistration/components/add_card.dart
deleted file mode 100644
index 443dd828..00000000
--- a/comwell_key_app/lib/pregistration/components/add_card.dart
+++ /dev/null
@@ -1,78 +0,0 @@
-
-import 'package:adyen_checkout/adyen_checkout.dart';
-import 'package:comwell_key_app/pregistration/bloc/preregistration_cubit.dart';
-import 'package:comwell_key_app/pregistration/models/add_card_payment_method.dart';
-import 'package:comwell_key_app/themes/light_theme.dart';
-import 'package:easy_localization/easy_localization.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
-import 'package:flutter_svg/flutter_svg.dart';
-
-
-class AddCard extends StatelessWidget {
- const AddCard({super.key});
-
- @override
- Widget build(BuildContext context) {
- final cubit = context.read<PreregistrationCubit>();
-
- // To add a card, users needs to perform a zero-amount payment
- final paymentMethodConfig = AddCardPaymentMethod(
- brands: [CardType.mc, CardType.visa],
- name: "Cards",
- type: "scheme",
- );
- return InkWell(
- onTap: () async {
- showBottomSheet(
- backgroundColor: Colors.white,
- context: context,
- builder: (context) {
- return FutureBuilder(
- future: cubit.sessionCheckout(),
- builder: (context, snapshot) {
- if (snapshot.hasError) {
- return Text("Error: ${snapshot.error}");
- }
- if (!snapshot.hasData) {
- return const CircularProgressIndicator();
- }
- final data = snapshot.data!;
- return AdyenCardComponent(
- configuration: cubit.cardComponentConfiguration(),
- paymentMethod: paymentMethodConfig.toJson(),
- checkout: data,
- onPaymentResult: (paymentResult) async {
- Navigator.pop(context);
- cubit.onPaymentResult(paymentResult);
- },
- );
- });
- });
- },
- child: Container(
- decoration: BoxDecoration(
- border: Border.all(color: colorDivider),
- ),
- padding: const EdgeInsets.all(12),
- child: Row(
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Text(
- "preregistration_payment_add_card".tr(),
- style: Theme.of(context).textTheme.bodyMedium,
- ),
- const SizedBox(width: 12),
- SvgPicture.asset("assets/icons/visa.svg"),
- const SizedBox(width: 4),
- SvgPicture.asset("assets/icons/mastercard.svg"),
- const SizedBox(width: 4),
- SvgPicture.asset("assets/icons/maestro.svg"),
- const Expanded(child: SizedBox()),
- SvgPicture.asset("assets/icons/ic_plus.svg"),
- ],
- ),
- ),
- );
- }
-}
diff --git a/comwell_key_app/lib/pregistration/pages/prereg_confirmation_page.dart b/comwell_key_app/lib/pregistration/pages/prereg_confirmation_page.dart
index 900f43e3..80b3b0c2 100644
--- a/comwell_key_app/lib/pregistration/pages/prereg_confirmation_page.dart
+++ b/comwell_key_app/lib/pregistration/pages/prereg_confirmation_page.dart
@@ -1,5 +1,4 @@
import 'package:comwell_key_app/pregistration/bloc/preregistration_cubit.dart';
-import 'package:comwell_key_app/pregistration/components/card_item.dart';
import 'package:comwell_key_app/pregistration/components/information_card.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
@@ -69,12 +68,6 @@ class PreregConfirmationPage extends StatelessWidget {
),
),
const SizedBox(height: 12),
- InformationCard(
- title: "preregistration_confirmation_payment_card_title".tr(),
- onEditClick: cubit.onEditPaymentMethodClicked,
- child: CardItem(paymentMethod: state.selectedPaymentMethod!),
- ),
- const SizedBox(height: 12),
InformationCard(
title: extrasTitleText,
onEditClick: cubit.onEditExtrasClicked,
diff --git a/comwell_key_app/lib/pregistration/pages/prereg_payment_page.dart b/comwell_key_app/lib/pregistration/pages/prereg_payment_page.dart
deleted file mode 100644
index a7a51e05..00000000
--- a/comwell_key_app/lib/pregistration/pages/prereg_payment_page.dart
+++ /dev/null
@@ -1,55 +0,0 @@
-import 'package:comwell_key_app/pregistration/bloc/preregistration_cubit.dart';
-import 'package:comwell_key_app/pregistration/components/add_card.dart';
-import 'package:comwell_key_app/pregistration/components/clickable_card_item.dart';
-import 'package:comwell_key_app/themes/dark_theme.dart';
-import 'package:easy_localization/easy_localization.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
-
-class PreregPaymentPage extends StatelessWidget {
- const PreregPaymentPage({super.key});
-
- @override
- Widget build(BuildContext context) {
- final cubit = context.read<PreregistrationCubit>();
- final isTermsAndConditionsAccepted = cubit.state.termsAndConditionsAccepted;
- final paymentMethods = cubit.state.storedPaymentMethods;
- final selectedPaymentMethod = cubit.state.selectedPaymentMethod;
- return ListView(
- key: const PageStorageKey("prereg_payment"),
- children: [
- const SizedBox(height: 40),
- Text("preregistration_payment_title".tr(),
- style: Theme.of(context).textTheme.headlineLarge),
- const SizedBox(height: 18),
- Text("preregistration_payment_subtitle".tr(),
- style: Theme.of(context).textTheme.bodySmall),
- const SizedBox(height: 40),
- ...paymentMethods.map((pm) => Padding(
- padding: const EdgeInsets.only(bottom: 12.0),
- child: ClickableCardItem(
- paymentMethod: pm,
- onClick: () => cubit.onSelectCard(pm),
- isSelected: pm.id == selectedPaymentMethod?.id,
- ),
- )),
- const AddCard(),
- Row(
- children: [
- Checkbox(
- value: isTermsAndConditionsAccepted,
- activeColor: sandColor[80],
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(4),
- ),
- onChanged: (toggle) {
- cubit.onTermsAndConditionsToggled(toggle ?? false);
- }),
- const Text("Jeg acceptere betingelserne")
- ],
- ),
- const SizedBox(height: 40)
- ],
- );
- }
-}
diff --git a/comwell_key_app/lib/pregistration/pregistration_repository.dart b/comwell_key_app/lib/pregistration/pregistration_repository.dart
index 9acc9c30..e839a933 100644
--- a/comwell_key_app/lib/pregistration/pregistration_repository.dart
+++ b/comwell_key_app/lib/pregistration/pregistration_repository.dart
@@ -1,21 +1,43 @@
+import 'dart:io';
+import 'dart:ui';
+
+import 'package:adyen_checkout/adyen_checkout.dart';
import 'package:comwell_key_app/profile_settings/repostiory/profile_settings_repository.dart';
+import 'package:comwell_key_app/services/adyen/adyen_amount.dart';
import 'package:comwell_key_app/services/adyen/stored_payment_method.dart';
import 'package:comwell_key_app/services/api.dart';
import 'package:comwell_key_app/utils/locator.dart';
+import 'package:flutter_dotenv/flutter_dotenv.dart';
class PreregistrationRepository {
- final Api api = Api();
+ final Api _api = Api();
final ProfileSettingsRepository profileSettingsRepository =
locator<ProfileSettingsRepository>();
PreregistrationRepository();
- Future<Iterable<StoredPaymentMethod>> getPaymentMethods() async {
- final response = await api.getPaymentMethods();
- return response.storedPaymentMethods;
+ Future<SessionCheckout> sessionCheckout(AdyenAmount amount) async {
+ final response = await _api.createAdyenSession(amount);
+ final id = response["Id"] as String;
+ final sessionData = response["SessionData"] as String;
+ return AdyenCheckout.session.create(
+ sessionId: id,
+ sessionData: sessionData,
+ configuration: cardComponentConfiguration());
+ }
+
+ CardComponentConfiguration cardComponentConfiguration() {
+ // TODO: missing endpoint to retrieve client key
+ return CardComponentConfiguration(
+ environment: Environment.test,
+ clientKey: dotenv.env['ADYEN_CLIENT_KEY']!,
+ countryCode: Locale(Platform.localeName).languageCode,
+ cardConfiguration: const CardConfiguration(),
+ );
}
+
static final Iterable<StoredPaymentMethod> mockStoredPaymentData = [
1,
2,
diff --git a/comwell_key_app/lib/pregistration/preregistration_flow.dart b/comwell_key_app/lib/pregistration/preregistration_flow.dart
index d495a35b..b7f009cf 100644
--- a/comwell_key_app/lib/pregistration/preregistration_flow.dart
+++ b/comwell_key_app/lib/pregistration/preregistration_flow.dart
@@ -2,7 +2,6 @@ import 'package:comwell_key_app/pregistration/bloc/preregistration_state.dart';
import 'package:comwell_key_app/pregistration/bloc/preregistration_cubit.dart';
import 'package:comwell_key_app/pregistration/pages/prereg_confirmation_page.dart';
import 'package:comwell_key_app/pregistration/pages/prereg_information_page.dart';
-import 'package:comwell_key_app/pregistration/pages/prereg_payment_page.dart';
import 'package:comwell_key_app/themes/dark_theme.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -10,7 +9,6 @@ import 'package:go_router/go_router.dart';
enum PreregistrationPage {
information,
- paymentMethod,
confirmation;
static PreregistrationPage fromIndex(int index) {
@@ -22,8 +20,6 @@ enum PreregistrationPage {
switch (page) {
case PreregistrationPage.information:
return PreregInformationPage(key: key);
- case PreregistrationPage.paymentMethod:
- return PreregPaymentPage(key: key);
case PreregistrationPage.confirmation:
return PreregConfirmationPage(key: key);
}