From 36006a2cd23897af0ed34094d90142b30880dc15 Mon Sep 17 00:00:00 2001 From: viktor Date: Thu, 30 Apr 2026 20:37:53 +0300 Subject: [PATCH] MS-509: Fix setup plreload for SDK language taken from the checkout API flutter(iOS, android) --- Sample/lib/feature/home/home_screen.dart | 21 ++++++++++++++++++- .../lib/feature/home/home_screen_cubit.dart | 21 ++++++++++++------- .../lib/feature/home/home_screen_state.dart | 5 +++++ 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/Sample/lib/feature/home/home_screen.dart b/Sample/lib/feature/home/home_screen.dart index ef60b5a..4ca87f8 100644 --- a/Sample/lib/feature/home/home_screen.dart +++ b/Sample/lib/feature/home/home_screen.dart @@ -30,6 +30,7 @@ class _HomeScreenState extends State { late TextEditingController cardExpiryTimeController; late TextEditingController paymentsListItemCountController; late TextEditingController defaultSelectedPaymentController; + late TextEditingController languageController; @override void initState() { @@ -44,6 +45,7 @@ class _HomeScreenState extends State { cardExpiryTimeController = TextEditingController(text: state.cardExpiryTime); paymentsListItemCountController = TextEditingController(text: state.paymentsListItemCount); defaultSelectedPaymentController = TextEditingController(text: state.defaultSelectedPayment); + languageController = TextEditingController(text: state.language); } @override @@ -73,6 +75,22 @@ class _HomeScreenState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ + DropdownMenu( + initialSelection: Platform.localeName.split("_")[0], + controller: languageController, + requestFocusOnTap: true, + label: const Text('Language'), + expandedInsets: EdgeInsets.zero, + onSelected: (String? lang) { + context.read().onLanguageChanged(lang); + }, + dropdownMenuEntries: ["en", "ar"].map>(( + String lang, + ) { + return DropdownMenuEntry(value: lang, label: lang); + }).toList(), + ), + const SizedBox(height: 8), TextFormField( controller: amountEditingController, onChanged: (text) { @@ -263,7 +281,8 @@ class _HomeScreenState extends State { ), const Text('Auto debit'), ], - ),Row( + ), + Row( children: [ Checkbox( checkColor: Colors.white, diff --git a/Sample/lib/feature/home/home_screen_cubit.dart b/Sample/lib/feature/home/home_screen_cubit.dart index 4b2ce08..17b1bc1 100644 --- a/Sample/lib/feature/home/home_screen_cubit.dart +++ b/Sample/lib/feature/home/home_screen_cubit.dart @@ -59,6 +59,7 @@ class HomeScreenCubit extends Cubit { currencyCode: currencyCode, phoneNumber: _customerPhone, customerId: customerId, + language: Platform.localeName.split("_")[0], formsOfPaymentChecked: Map.from({ FormsOfPayment.redirect: true, FormsOfPayment.flex: true, @@ -100,7 +101,9 @@ class HomeScreenCubit extends Cubit { void getSessionId({required String merchantId, required String apiKey}) async { _logger.d("getSessionId, merchantId: $merchantId, apiKey: $apiKey"); emit(state.copyWith(sessionId: null, hasSessionLoaded: false)); - final language = Platform.localeName.split("_")[0]; + + final language = state.language ?? Platform.localeName.split("_")[0]; + final cardExpiryTime = state.cardExpiryTime?.isNotEmpty == true ? int.tryParse(state.cardExpiryTime!) : null; @@ -319,7 +322,7 @@ class HomeScreenCubit extends Cubit { final brandingOptionsRequest = BrandingOptionsRequest(paymentMethods: BrandingPaymentMethods()); state.pgCodesChecked?.forEach((code, isSelected) { - if(isSelected) { + if (isSelected) { switch (code) { case PGCode.knet: brandingOptionsRequest.paymentMethods.knetStaging = BrandingOption( @@ -334,13 +337,13 @@ class HomeScreenCubit extends Cubit { fontWeight: 400, ); case PGCode.benefit: - /* brandingOptionsRequest.paymentMethods.benefit = BrandingOption( + /* brandingOptionsRequest.paymentMethods.benefit = BrandingOption( text: "Branding text for Benefit", color: "#006400", fontWeight: 900, );*/ case PGCode.benefitpay: - /* brandingOptionsRequest.paymentMethods.benefitpay = BrandingOption( + /* brandingOptionsRequest.paymentMethods.benefitpay = BrandingOption( text: "Branding text for BenefitPay", color: "#48D1CC", fontWeight: 900, @@ -381,8 +384,8 @@ class HomeScreenCubit extends Cubit { color: "#708090", fontWeight: 700, ); - case PGCode.cs: - brandingOptionsRequest.paymentMethods.cs = BrandingOption( + case PGCode.cs: + brandingOptionsRequest.paymentMethods.cs = BrandingOption( text: "Branding text for cs", color: "#D2691E", fontWeight: 300, @@ -399,11 +402,15 @@ class HomeScreenCubit extends Cubit { color: "#2F4F4F", fontWeight: 300, ); - default: + default: } } }); return brandingOptionsRequest; } + + void onLanguageChanged(String? lang) { + emit(state.copyWith(language: lang)); + } } diff --git a/Sample/lib/feature/home/home_screen_state.dart b/Sample/lib/feature/home/home_screen_state.dart index 0d42789..1ee2da0 100644 --- a/Sample/lib/feature/home/home_screen_state.dart +++ b/Sample/lib/feature/home/home_screen_state.dart @@ -15,6 +15,7 @@ final class HomeScreenState extends Equatable { final String? cardExpiryTime; final String paymentsListItemCount; final String? defaultSelectedPayment; + final String? language; final bool showPaymentDetails; final bool? noForms; final bool? preloadPayload; @@ -37,6 +38,7 @@ final class HomeScreenState extends Equatable { this.cardExpiryTime, this.paymentsListItemCount = "$_default_payments_list__item_count", this.defaultSelectedPayment, + this.language, this.showPaymentDetails = true, this.preloadPayload = true, this.isAutoDebit = false, @@ -60,6 +62,7 @@ final class HomeScreenState extends Equatable { String? cardExpiryTime, String? paymentsListItemCount, String? defaultSelectedPayment, + String? language, bool? showPaymentDetails, bool? noForms, bool? preloadPayload, @@ -82,6 +85,7 @@ final class HomeScreenState extends Equatable { cardExpiryTime: cardExpiryTime ?? this.cardExpiryTime, paymentsListItemCount: paymentsListItemCount ?? this.paymentsListItemCount, defaultSelectedPayment: defaultSelectedPayment ?? this.defaultSelectedPayment, + language: language ?? this.language, showPaymentDetails: showPaymentDetails ?? this.showPaymentDetails, noForms: noForms ?? this.noForms, preloadPayload: preloadPayload ?? this.preloadPayload, @@ -107,6 +111,7 @@ final class HomeScreenState extends Equatable { cardExpiryTime, paymentsListItemCount, defaultSelectedPayment, + language, sessionId, preloadPayload, isAutoDebit,