Build exchange workspace with clear money movement #29
No files matched your search
@@ -238,3 +238,21 @@ tests were needed. The PR is not merged.
|
||||
unmerged. Task and PR have frontend label, tech owner and SXCHNGE project.
|
||||
Browser demo walkthrough also completed exchange and payout, confirming source
|
||||
currency handoffs and exact fee/debit/receipt values on the result screen.
|
||||
|
||||
### Workspace copy cleanup — follow-up to #28
|
||||
|
||||
At the user's request, removed repeated demo/preview banners from the workspace,
|
||||
transaction forms, auth, email confirmation, identity and limits. Confirmation
|
||||
and result copy now uses ordinary product wording in EN/RU; the mobile wordmark
|
||||
remains without the extra note. Removed unused localization entries and duplicate
|
||||
email-state copy. Existing journey measurement, simulation flags, service behavior,
|
||||
funds explanations and recovery controls are unchanged. Development constraints
|
||||
belong in this record and package README, not repeated throughout the product UI.
|
||||
|
||||
Delivery continues in [PR #29](https://git.sendico.io/tech/sxchnge/pulls/29) on
|
||||
`workspace-28`. This copy change does not connect real authentication, email,
|
||||
payment, support or backoffice services.
|
||||
Validation: all 115 frontend tests, app analysis, app Dart formatting, web build
|
||||
and diff checks pass. Updated existing copy expectations; telemetry tests still
|
||||
verify simulated events never count as real business success. No new click events
|
||||
were needed for this presentation-only cleanup.
|
||||
@@ -133,11 +133,6 @@ class _AuthFormState extends State<AuthForm> {
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
l.earlyPreview,
|
||||
style: text.bodySmall!.copyWith(color: colors.onSurfaceVariant),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
Text(
|
||||
_signUp ? l.signupHeading : l.loginHeading,
|
||||
|
||||
@@ -221,13 +221,13 @@ abstract class AppLocalizations {
|
||||
/// No description provided for @loginPreview.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Demo login completed. No real session was created. Your credentials have not been sent or saved.'**
|
||||
/// **'You’re signed in.'**
|
||||
String get loginPreview;
|
||||
|
||||
/// No description provided for @signupPreview.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Demo sign-up completed. No real account was created. Your credentials have not been sent or saved.'**
|
||||
/// **'Your account is ready.'**
|
||||
String get signupPreview;
|
||||
|
||||
/// No description provided for @alreadyMember.
|
||||
@@ -254,12 +254,6 @@ abstract class AppLocalizations {
|
||||
/// **'Create an account'**
|
||||
String get createAnAccount;
|
||||
|
||||
/// No description provided for @earlyPreview.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'EARLY PREVIEW · Login and sign-up are not live yet.'**
|
||||
String get earlyPreview;
|
||||
|
||||
/// No description provided for @brandEyebrow.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -476,16 +470,10 @@ abstract class AppLocalizations {
|
||||
/// **'No email? Check your spam folder or request another below.'**
|
||||
String get verificationHint;
|
||||
|
||||
/// No description provided for @verificationDemo.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'DEMO · No real email is sent and no account is verified.'**
|
||||
String get verificationDemo;
|
||||
|
||||
/// No description provided for @verificationDemoLink.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Open demo confirmation link'**
|
||||
/// **'Continue to confirmation'**
|
||||
String get verificationDemoLink;
|
||||
|
||||
/// No description provided for @verificationStep.
|
||||
@@ -494,30 +482,6 @@ abstract class AppLocalizations {
|
||||
/// **'CONFIRM YOUR EMAIL'**
|
||||
String get verificationStep;
|
||||
|
||||
/// No description provided for @demoSentHeading.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Demo email prepared.'**
|
||||
String get demoSentHeading;
|
||||
|
||||
/// No description provided for @demoSentBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'No email was sent. Use the demo confirmation below to preview the next step.'**
|
||||
String get demoSentBody;
|
||||
|
||||
/// No description provided for @demoVerifiedHeading.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Demo verification\ncomplete.'**
|
||||
String get demoVerifiedHeading;
|
||||
|
||||
/// No description provided for @demoVerifiedBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'You’ve previewed email confirmation. No account was verified. Return to login to explore the demo.'**
|
||||
String get demoVerifiedBody;
|
||||
|
||||
/// No description provided for @verificationRecipient.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -530,12 +494,6 @@ abstract class AppLocalizations {
|
||||
/// **'Change email'**
|
||||
String get verificationChangeEmail;
|
||||
|
||||
/// No description provided for @demoResend.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Prepare demo email again'**
|
||||
String get demoResend;
|
||||
|
||||
/// No description provided for @kycTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -548,12 +506,6 @@ abstract class AppLocalizations {
|
||||
/// **'Your account, at your pace. Verify your identity when you need higher limits.'**
|
||||
String get kycIntro;
|
||||
|
||||
/// No description provided for @kycDemo.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'DEMO · Use sample images only. Photos stay in memory, are never uploaded, and disappear when you leave or reload. Review decisions are simulated.'**
|
||||
String get kycDemo;
|
||||
|
||||
/// No description provided for @kycUnverified.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -665,7 +617,7 @@ abstract class AppLocalizations {
|
||||
/// No description provided for @kycSupportBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Support is not connected in this preview. In the live app, you will be able to request a review here without submitting documents again.'**
|
||||
/// **'Support is currently unavailable. Please try again later.'**
|
||||
String get kycSupportBody;
|
||||
|
||||
/// No description provided for @kycBasic.
|
||||
@@ -686,12 +638,6 @@ abstract class AppLocalizations {
|
||||
/// **'Your limits'**
|
||||
String get kycLimits;
|
||||
|
||||
/// No description provided for @kycLimitsDemo.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Illustrative limits from the demo service. These are not a live offer.'**
|
||||
String get kycLimitsDemo;
|
||||
|
||||
/// No description provided for @kycDay.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -815,7 +761,7 @@ abstract class AppLocalizations {
|
||||
/// No description provided for @kycClose.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Back to account preview'**
|
||||
/// **'Back to account'**
|
||||
String get kycClose;
|
||||
|
||||
/// No description provided for @kycReviewHelp.
|
||||
@@ -836,12 +782,6 @@ abstract class AppLocalizations {
|
||||
/// **'Submit for review'**
|
||||
String get kycSubmit;
|
||||
|
||||
/// No description provided for @kycSubmitDemo.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Simulate submission'**
|
||||
String get kycSubmitDemo;
|
||||
|
||||
/// No description provided for @kycWorking.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -941,7 +881,7 @@ abstract class AppLocalizations {
|
||||
/// No description provided for @kycDemoControls.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Demo: simulate a backoffice decision'**
|
||||
/// **'Review scenarios'**
|
||||
String get kycDemoControls;
|
||||
|
||||
/// No description provided for @kycDemoApprove.
|
||||
@@ -1112,12 +1052,6 @@ abstract class AppLocalizations {
|
||||
/// **'Refresh'**
|
||||
String get wRefresh;
|
||||
|
||||
/// No description provided for @wDemo.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Demo workspace · No real money moves.'**
|
||||
String get wDemo;
|
||||
|
||||
/// No description provided for @wSource.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -1151,7 +1085,7 @@ abstract class AppLocalizations {
|
||||
/// No description provided for @wRecipientHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Sample recipient — demo only'**
|
||||
/// **'Recipient name or reference'**
|
||||
String get wRecipientHint;
|
||||
|
||||
/// No description provided for @wReview.
|
||||
@@ -1223,7 +1157,7 @@ abstract class AppLocalizations {
|
||||
/// No description provided for @wConfirm.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Confirm demo transaction'**
|
||||
/// **'Confirm transaction'**
|
||||
String get wConfirm;
|
||||
|
||||
/// No description provided for @wEdit.
|
||||
@@ -1310,18 +1244,6 @@ abstract class AppLocalizations {
|
||||
/// **'The transaction did not complete. The amount and fee are available in your account again.'**
|
||||
String get wFailedOutgoing;
|
||||
|
||||
/// No description provided for @wDemoMethod.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Demo transfer'**
|
||||
String get wDemoMethod;
|
||||
|
||||
/// No description provided for @wDemoMethodHelp.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Try the flow with sample data. No bank or payment provider is contacted.'**
|
||||
String get wDemoMethodHelp;
|
||||
|
||||
/// No description provided for @wUnavailable.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -1463,7 +1385,7 @@ abstract class AppLocalizations {
|
||||
/// No description provided for @wLanguageSaved.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Saved to your demo account.'**
|
||||
/// **'Saved to your account.'**
|
||||
String get wLanguageSaved;
|
||||
|
||||
/// No description provided for @wLanguageFailed.
|
||||
@@ -1487,7 +1409,7 @@ abstract class AppLocalizations {
|
||||
/// No description provided for @wSecurityBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Live sessions, password changes and two-step verification are not connected in this demo.'**
|
||||
/// **'Password and security settings are not available yet.'**
|
||||
String get wSecurityBody;
|
||||
|
||||
/// No description provided for @wIdentity.
|
||||
|
||||
@@ -70,12 +70,10 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
String get letsGo => 'Let’s go';
|
||||
|
||||
@override
|
||||
String get loginPreview =>
|
||||
'Demo login completed. No real session was created. Your credentials have not been sent or saved.';
|
||||
String get loginPreview => 'You’re signed in.';
|
||||
|
||||
@override
|
||||
String get signupPreview =>
|
||||
'Demo sign-up completed. No real account was created. Your credentials have not been sent or saved.';
|
||||
String get signupPreview => 'Your account is ready.';
|
||||
|
||||
@override
|
||||
String get alreadyMember => 'Already part of sxchnge?';
|
||||
@@ -89,10 +87,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get createAnAccount => 'Create an account';
|
||||
|
||||
@override
|
||||
String get earlyPreview =>
|
||||
'EARLY PREVIEW · Login and sign-up are not live yet.';
|
||||
|
||||
@override
|
||||
String get brandEyebrow => 'A LITTLE CHANGE. A BIG NEXT STEP.';
|
||||
|
||||
@@ -211,38 +205,17 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
'No email? Check your spam folder or request another below.';
|
||||
|
||||
@override
|
||||
String get verificationDemo =>
|
||||
'DEMO · No real email is sent and no account is verified.';
|
||||
|
||||
@override
|
||||
String get verificationDemoLink => 'Open demo confirmation link';
|
||||
String get verificationDemoLink => 'Continue to confirmation';
|
||||
|
||||
@override
|
||||
String get verificationStep => 'CONFIRM YOUR EMAIL';
|
||||
|
||||
@override
|
||||
String get demoSentHeading => 'Demo email prepared.';
|
||||
|
||||
@override
|
||||
String get demoSentBody =>
|
||||
'No email was sent. Use the demo confirmation below to preview the next step.';
|
||||
|
||||
@override
|
||||
String get demoVerifiedHeading => 'Demo verification\ncomplete.';
|
||||
|
||||
@override
|
||||
String get demoVerifiedBody =>
|
||||
'You’ve previewed email confirmation. No account was verified. Return to login to explore the demo.';
|
||||
|
||||
@override
|
||||
String get verificationRecipient => 'Recipient';
|
||||
|
||||
@override
|
||||
String get verificationChangeEmail => 'Change email';
|
||||
|
||||
@override
|
||||
String get demoResend => 'Prepare demo email again';
|
||||
|
||||
@override
|
||||
String get kycTitle => 'Verification & limits';
|
||||
|
||||
@@ -250,10 +223,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
String get kycIntro =>
|
||||
'Your account, at your pace. Verify your identity when you need higher limits.';
|
||||
|
||||
@override
|
||||
String get kycDemo =>
|
||||
'DEMO · Use sample images only. Photos stay in memory, are never uploaded, and disappear when you leave or reload. Review decisions are simulated.';
|
||||
|
||||
@override
|
||||
String get kycUnverified => 'Not verified';
|
||||
|
||||
@@ -319,7 +288,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get kycSupportBody =>
|
||||
'Support is not connected in this preview. In the live app, you will be able to request a review here without submitting documents again.';
|
||||
'Support is currently unavailable. Please try again later.';
|
||||
|
||||
@override
|
||||
String get kycBasic => 'Basic';
|
||||
@@ -330,10 +299,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get kycLimits => 'Your limits';
|
||||
|
||||
@override
|
||||
String get kycLimitsDemo =>
|
||||
'Illustrative limits from the demo service. These are not a live offer.';
|
||||
|
||||
@override
|
||||
String get kycDay => 'Daily volume';
|
||||
|
||||
@@ -400,7 +365,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
String get kycSkip => 'Keep basic limits';
|
||||
|
||||
@override
|
||||
String get kycClose => 'Back to account preview';
|
||||
String get kycClose => 'Back to account';
|
||||
|
||||
@override
|
||||
String get kycReviewHelp =>
|
||||
@@ -412,9 +377,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get kycSubmit => 'Submit for review';
|
||||
|
||||
@override
|
||||
String get kycSubmitDemo => 'Simulate submission';
|
||||
|
||||
@override
|
||||
String get kycWorking => 'Processing… Please keep this page open.';
|
||||
|
||||
@@ -476,7 +438,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
'Your review status has changed. Refresh it before continuing.';
|
||||
|
||||
@override
|
||||
String get kycDemoControls => 'Demo: simulate a backoffice decision';
|
||||
String get kycDemoControls => 'Review scenarios';
|
||||
|
||||
@override
|
||||
String get kycDemoApprove => 'Approve';
|
||||
@@ -566,9 +528,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get wRefresh => 'Refresh';
|
||||
|
||||
@override
|
||||
String get wDemo => 'Demo workspace · No real money moves.';
|
||||
|
||||
@override
|
||||
String get wSource => 'From account';
|
||||
|
||||
@@ -585,7 +544,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
String get wRecipient => 'Recipient';
|
||||
|
||||
@override
|
||||
String get wRecipientHint => 'Sample recipient — demo only';
|
||||
String get wRecipientHint => 'Recipient name or reference';
|
||||
|
||||
@override
|
||||
String get wReview => 'Review';
|
||||
@@ -623,7 +582,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
String get wNewQuote => 'Refresh quote';
|
||||
|
||||
@override
|
||||
String get wConfirm => 'Confirm demo transaction';
|
||||
String get wConfirm => 'Confirm transaction';
|
||||
|
||||
@override
|
||||
String get wEdit => 'Edit details';
|
||||
@@ -675,13 +634,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
String get wFailedOutgoing =>
|
||||
'The transaction did not complete. The amount and fee are available in your account again.';
|
||||
|
||||
@override
|
||||
String get wDemoMethod => 'Demo transfer';
|
||||
|
||||
@override
|
||||
String get wDemoMethodHelp =>
|
||||
'Try the flow with sample data. No bank or payment provider is contacted.';
|
||||
|
||||
@override
|
||||
String get wUnavailable =>
|
||||
'Could not refresh. The displayed information may be out of date. Try again.';
|
||||
@@ -762,7 +714,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
String get wLanguageHelp => 'Used throughout your account.';
|
||||
|
||||
@override
|
||||
String get wLanguageSaved => 'Saved to your demo account.';
|
||||
String get wLanguageSaved => 'Saved to your account.';
|
||||
|
||||
@override
|
||||
String get wLanguageFailed =>
|
||||
@@ -777,7 +729,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get wSecurityBody =>
|
||||
'Live sessions, password changes and two-step verification are not connected in this demo.';
|
||||
'Password and security settings are not available yet.';
|
||||
|
||||
@override
|
||||
String get wIdentity => 'Identity verification';
|
||||
|
||||
@@ -70,12 +70,10 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get letsGo => 'Продолжить';
|
||||
|
||||
@override
|
||||
String get loginPreview =>
|
||||
'Демонстрационный вход выполнен. Реальная сессия не создана. Учётные данные не отправлены и не сохранены.';
|
||||
String get loginPreview => 'Вы вошли в аккаунт.';
|
||||
|
||||
@override
|
||||
String get signupPreview =>
|
||||
'Демонстрационная регистрация выполнена. Реальный аккаунт не создан. Учётные данные не отправлены и не сохранены.';
|
||||
String get signupPreview => 'Ваш аккаунт готов.';
|
||||
|
||||
@override
|
||||
String get alreadyMember => 'Уже есть аккаунт sxchnge?';
|
||||
@@ -89,10 +87,6 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
@override
|
||||
String get createAnAccount => 'Зарегистрироваться';
|
||||
|
||||
@override
|
||||
String get earlyPreview =>
|
||||
'ПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ · Вход и регистрация пока недоступны.';
|
||||
|
||||
@override
|
||||
String get brandEyebrow => 'МАЛЕНЬКАЯ ПЕРЕМЕНА. БОЛЬШОЙ ШАГ.';
|
||||
|
||||
@@ -212,38 +206,17 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
'Нет письма? Проверьте папку «Спам» или запросите новое ниже.';
|
||||
|
||||
@override
|
||||
String get verificationDemo =>
|
||||
'ДЕМО · Письмо не отправляется, реальный аккаунт не подтверждается.';
|
||||
|
||||
@override
|
||||
String get verificationDemoLink => 'Открыть демоссылку подтверждения';
|
||||
String get verificationDemoLink => 'Перейти к подтверждению';
|
||||
|
||||
@override
|
||||
String get verificationStep => 'ПОДТВЕРДИТЕ ПОЧТУ';
|
||||
|
||||
@override
|
||||
String get demoSentHeading => 'Демописьмо готово.';
|
||||
|
||||
@override
|
||||
String get demoSentBody =>
|
||||
'Письмо не отправлено. Используйте демоссылку ниже, чтобы посмотреть следующий шаг.';
|
||||
|
||||
@override
|
||||
String get demoVerifiedHeading => 'Демоподтверждение\nзавершено.';
|
||||
|
||||
@override
|
||||
String get demoVerifiedBody =>
|
||||
'Вы посмотрели подтверждение почты. Реальный аккаунт не подтверждён. Вернитесь ко входу, чтобы продолжить знакомство с демоверсией.';
|
||||
|
||||
@override
|
||||
String get verificationRecipient => 'Получатель';
|
||||
|
||||
@override
|
||||
String get verificationChangeEmail => 'Изменить почту';
|
||||
|
||||
@override
|
||||
String get demoResend => 'Подготовить демописьмо ещё раз';
|
||||
|
||||
@override
|
||||
String get kycTitle => 'Верификация и лимиты';
|
||||
|
||||
@@ -251,10 +224,6 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get kycIntro =>
|
||||
'Ваш аккаунт — ваш темп. Подтвердите личность, когда понадобятся более высокие лимиты.';
|
||||
|
||||
@override
|
||||
String get kycDemo =>
|
||||
'ДЕМО · Используйте только тестовые изображения. Фото хранятся в памяти, не отправляются и удаляются при выходе или перезагрузке. Решения проверки имитируются.';
|
||||
|
||||
@override
|
||||
String get kycUnverified => 'Личность не подтверждена';
|
||||
|
||||
@@ -319,8 +288,7 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get kycSupport => 'Обратиться в поддержку';
|
||||
|
||||
@override
|
||||
String get kycSupportBody =>
|
||||
'В демоверсии поддержка не подключена. В рабочем приложении здесь можно будет запросить пересмотр без повторной отправки документов.';
|
||||
String get kycSupportBody => 'Поддержка сейчас недоступна. Попробуйте позже.';
|
||||
|
||||
@override
|
||||
String get kycBasic => 'Базовый';
|
||||
@@ -331,10 +299,6 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
@override
|
||||
String get kycLimits => 'Ваши лимиты';
|
||||
|
||||
@override
|
||||
String get kycLimitsDemo =>
|
||||
'Пример лимитов из демосервиса. Это не действующее предложение.';
|
||||
|
||||
@override
|
||||
String get kycDay => 'Объём за день';
|
||||
|
||||
@@ -401,7 +365,7 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get kycSkip => 'Оставить базовые лимиты';
|
||||
|
||||
@override
|
||||
String get kycClose => 'К демоаккаунту';
|
||||
String get kycClose => 'К аккаунту';
|
||||
|
||||
@override
|
||||
String get kycReviewHelp =>
|
||||
@@ -413,9 +377,6 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
@override
|
||||
String get kycSubmit => 'Отправить на проверку';
|
||||
|
||||
@override
|
||||
String get kycSubmitDemo => 'Имитировать отправку';
|
||||
|
||||
@override
|
||||
String get kycWorking => 'Обработка… Не закрывайте страницу.';
|
||||
|
||||
@@ -477,7 +438,7 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
'Статус проверки изменился. Обновите его, прежде чем продолжить.';
|
||||
|
||||
@override
|
||||
String get kycDemoControls => 'Демо: имитация решения сотрудника';
|
||||
String get kycDemoControls => 'Сценарии проверки';
|
||||
|
||||
@override
|
||||
String get kycDemoApprove => 'Одобрить';
|
||||
@@ -567,9 +528,6 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
@override
|
||||
String get wRefresh => 'Обновить';
|
||||
|
||||
@override
|
||||
String get wDemo => 'Демонстрация · Реальные деньги не переводятся.';
|
||||
|
||||
@override
|
||||
String get wSource => 'Со счёта';
|
||||
|
||||
@@ -586,7 +544,7 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get wRecipient => 'Получатель';
|
||||
|
||||
@override
|
||||
String get wRecipientHint => 'Тестовый получатель — только демо';
|
||||
String get wRecipientHint => 'Имя или реквизиты получателя';
|
||||
|
||||
@override
|
||||
String get wReview => 'Проверить';
|
||||
@@ -624,7 +582,7 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get wNewQuote => 'Обновить расчёт';
|
||||
|
||||
@override
|
||||
String get wConfirm => 'Подтвердить тестовую операцию';
|
||||
String get wConfirm => 'Подтвердить операцию';
|
||||
|
||||
@override
|
||||
String get wEdit => 'Изменить данные';
|
||||
@@ -675,13 +633,6 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get wFailedOutgoing =>
|
||||
'Операция не выполнена. Сумма и комиссия снова доступны на вашем счёте.';
|
||||
|
||||
@override
|
||||
String get wDemoMethod => 'Тестовый перевод';
|
||||
|
||||
@override
|
||||
String get wDemoMethodHelp =>
|
||||
'Попробуйте сценарий с тестовыми данными. Банки и платёжные системы не подключены.';
|
||||
|
||||
@override
|
||||
String get wUnavailable =>
|
||||
'Не удалось обновить данные. Информация может быть устаревшей. Повторите попытку.';
|
||||
@@ -760,7 +711,7 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get wLanguageHelp => 'Используется во всём аккаунте.';
|
||||
|
||||
@override
|
||||
String get wLanguageSaved => 'Сохранено в тестовом аккаунте.';
|
||||
String get wLanguageSaved => 'Сохранено в аккаунте.';
|
||||
|
||||
@override
|
||||
String get wLanguageFailed =>
|
||||
@@ -775,7 +726,7 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get wSecurityBody =>
|
||||
'В этой демонстрации не подключены рабочие сессии, смена пароля и двухэтапная проверка.';
|
||||
'Настройки пароля и безопасности пока недоступны.';
|
||||
|
||||
@override
|
||||
String get wIdentity => 'Подтверждение личности';
|
||||
|
||||
@@ -77,7 +77,7 @@ class IdentityForm extends StatelessWidget {
|
||||
FilledButton(
|
||||
key: const ValueKey('kyc-submit'),
|
||||
onPressed: p.canSubmit ? p.submit : null,
|
||||
child: Text(p.isDemo ? l.kycSubmitDemo : l.kycSubmit),
|
||||
child: Text(l.kycSubmit),
|
||||
),
|
||||
if (p.step > 0)
|
||||
TextButton(onPressed: p.busy ? null : p.back, child: Text(l.kycBack)),
|
||||
|
||||
@@ -47,8 +47,6 @@ class LimitsPanel extends StatelessWidget {
|
||||
data.tier == AccountTier.basic ? l.kycBasic : l.kycVerifiedTier,
|
||||
style: t.textTheme.titleLarge,
|
||||
),
|
||||
if (data.simulated)
|
||||
Text(l.kycLimitsDemo, style: t.textTheme.bodySmall),
|
||||
const SizedBox(height: 12),
|
||||
if (data.rows.isEmpty) Text(l.kycLimitsEmpty),
|
||||
for (final row in data.rows) ...[
|
||||
|
||||
@@ -149,21 +149,6 @@ class IdentityPageState extends State<IdentityPage> {
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
Text(l.kycIntro, style: t.textTheme.bodyLarge),
|
||||
const SizedBox(height: 20),
|
||||
if (p.isDemo)
|
||||
Container(
|
||||
padding: const EdgeInsets.all(16),
|
||||
decoration: BoxDecoration(
|
||||
color: t.colorScheme.tertiaryContainer,
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
),
|
||||
child: Text(
|
||||
l.kycDemo,
|
||||
style: TextStyle(
|
||||
color: t.colorScheme.onTertiaryContainer,
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
if (p.busy) ...[
|
||||
const LinearProgressIndicator(),
|
||||
|
||||
@@ -20,13 +20,12 @@
|
||||
"hideConfirmation": "Hide confirmation",
|
||||
"createAccount": "Create account",
|
||||
"letsGo": "Let’s go",
|
||||
"loginPreview": "Demo login completed. No real session was created. Your credentials have not been sent or saved.",
|
||||
"signupPreview": "Demo sign-up completed. No real account was created. Your credentials have not been sent or saved.",
|
||||
"loginPreview": "You’re signed in.",
|
||||
"signupPreview": "Your account is ready.",
|
||||
"alreadyMember": "Already part of sxchnge?",
|
||||
"newHere": "New around here?",
|
||||
"loginInstead": "Log in instead",
|
||||
"createAnAccount": "Create an account",
|
||||
"earlyPreview": "EARLY PREVIEW · Login and sign-up are not live yet.",
|
||||
"brandEyebrow": "A LITTLE CHANGE. A BIG NEXT STEP.",
|
||||
"brandHeading": "Good moves.\nStart here.",
|
||||
"brandIntro": "A fresh way forward.\nMake it yours with sxchnge.",
|
||||
@@ -63,19 +62,12 @@
|
||||
"verificationRetry": "Retry verification",
|
||||
"verificationBack": "Back to login",
|
||||
"verificationHint": "No email? Check your spam folder or request another below.",
|
||||
"verificationDemo": "DEMO · No real email is sent and no account is verified.",
|
||||
"verificationDemoLink": "Open demo confirmation link",
|
||||
"verificationDemoLink": "Continue to confirmation",
|
||||
"verificationStep": "CONFIRM YOUR EMAIL",
|
||||
"demoSentHeading": "Demo email prepared.",
|
||||
"demoSentBody": "No email was sent. Use the demo confirmation below to preview the next step.",
|
||||
"demoVerifiedHeading": "Demo verification\ncomplete.",
|
||||
"demoVerifiedBody": "You’ve previewed email confirmation. No account was verified. Return to login to explore the demo.",
|
||||
"verificationRecipient": "Recipient",
|
||||
"verificationChangeEmail": "Change email",
|
||||
"demoResend": "Prepare demo email again",
|
||||
"kycTitle": "Verification & limits",
|
||||
"kycIntro": "Your account, at your pace. Verify your identity when you need higher limits.",
|
||||
"kycDemo": "DEMO · Use sample images only. Photos stay in memory, are never uploaded, and disappear when you leave or reload. Review decisions are simulated.",
|
||||
"kycUnverified": "Not verified",
|
||||
"kycPending": "In review",
|
||||
"kycApproved": "Identity verified",
|
||||
@@ -94,11 +86,10 @@
|
||||
"kycResubmit": "Replace photos",
|
||||
"kycRefresh": "Refresh status & limits",
|
||||
"kycSupport": "Contact support",
|
||||
"kycSupportBody": "Support is not connected in this preview. In the live app, you will be able to request a review here without submitting documents again.",
|
||||
"kycSupportBody": "Support is currently unavailable. Please try again later.",
|
||||
"kycBasic": "Basic",
|
||||
"kycVerifiedTier": "Verified",
|
||||
"kycLimits": "Your limits",
|
||||
"kycLimitsDemo": "Illustrative limits from the demo service. These are not a live offer.",
|
||||
"kycDay": "Daily volume",
|
||||
"kycMonth": "Monthly volume",
|
||||
"kycCurrent": "Current cap",
|
||||
@@ -119,11 +110,10 @@
|
||||
"kycNext": "Continue",
|
||||
"kycBack": "Back",
|
||||
"kycSkip": "Keep basic limits",
|
||||
"kycClose": "Back to account preview",
|
||||
"kycClose": "Back to account",
|
||||
"kycReviewHelp": "Check that both photos are readable and show the same passport. A staff member will review them; submission does not immediately raise your limits.",
|
||||
"kycConfirm": "These photos show me and my own valid passport.",
|
||||
"kycSubmit": "Submit for review",
|
||||
"kycSubmitDemo": "Simulate submission",
|
||||
"kycWorking": "Processing… Please keep this page open.",
|
||||
"kycDiscardTitle": "Discard these photos?",
|
||||
"kycDiscardBody": "Your draft is only in memory. Leaving will remove the selected photos; you can start again later.",
|
||||
@@ -140,7 +130,7 @@
|
||||
"kycErrorSession": "Your session has expired. Return to login, then check your verification status.",
|
||||
"kycErrorRate": "Too many requests. Wait a moment before trying again.",
|
||||
"kycErrorConflict": "Your review status has changed. Refresh it before continuing.",
|
||||
"kycDemoControls": "Demo: simulate a backoffice decision",
|
||||
"kycDemoControls": "Review scenarios",
|
||||
"kycDemoApprove": "Approve",
|
||||
"kycDemoCorrect": "Request clearer passport",
|
||||
"kycDemoSelfie": "Request clearer selfie",
|
||||
@@ -169,13 +159,12 @@
|
||||
"wEmptyActivity": "Your next move starts here. Your transactions will appear below.",
|
||||
"wEmptyAccounts": "Your accounts are not ready yet. Try refreshing.",
|
||||
"wRefresh": "Refresh",
|
||||
"wDemo": "Demo workspace · No real money moves.",
|
||||
"wSource": "From account",
|
||||
"wDestination": "To account",
|
||||
"wReceiveAccount": "Receiving account",
|
||||
"wAmount": "Amount",
|
||||
"wRecipient": "Recipient",
|
||||
"wRecipientHint": "Sample recipient — demo only",
|
||||
"wRecipientHint": "Recipient name or reference",
|
||||
"wReview": "Review",
|
||||
"wReviewTitle": "One last look.",
|
||||
"wFee": "Fee",
|
||||
@@ -187,7 +176,7 @@
|
||||
"wQuoteNotice": "These terms are valid for 60 seconds. Confirm them before continuing.",
|
||||
"wExpired": "This quote expired. Refresh it and review the new terms.",
|
||||
"wNewQuote": "Refresh quote",
|
||||
"wConfirm": "Confirm demo transaction",
|
||||
"wConfirm": "Confirm transaction",
|
||||
"wEdit": "Edit details",
|
||||
"wClose": "Close",
|
||||
"wWorking": "Working on it…",
|
||||
@@ -202,8 +191,6 @@
|
||||
"wCompletePayout": "Your payout is complete. The amount and fee have been deducted from your account.",
|
||||
"wFailedTopUp": "The top-up did not complete. No money was added to your account.",
|
||||
"wFailedOutgoing": "The transaction did not complete. The amount and fee are available in your account again.",
|
||||
"wDemoMethod": "Demo transfer",
|
||||
"wDemoMethodHelp": "Try the flow with sample data. No bank or payment provider is contacted.",
|
||||
"wUnavailable": "Could not refresh. The displayed information may be out of date. Try again.",
|
||||
"wInvalidAmount": "Enter an amount greater than zero, using the currency’s decimal precision.",
|
||||
"wInsufficient": "Not enough available money for this amount and fee. Top up or enter a smaller amount.",
|
||||
@@ -227,11 +214,11 @@
|
||||
"wPreferences": "Make it yours.",
|
||||
"wLanguage": "Account language",
|
||||
"wLanguageHelp": "Used throughout your account.",
|
||||
"wLanguageSaved": "Saved to your demo account.",
|
||||
"wLanguageSaved": "Saved to your account.",
|
||||
"wLanguageFailed": "Changed for this session, but not saved to your account. Retry below.",
|
||||
"wProfileError": "Account preferences could not be loaded. Try again.",
|
||||
"wSecurity": "Security",
|
||||
"wSecurityBody": "Live sessions, password changes and two-step verification are not connected in this demo.",
|
||||
"wSecurityBody": "Password and security settings are not available yet.",
|
||||
"wIdentity": "Identity verification",
|
||||
"wIdentityHelp": "Optional verification for higher limits.",
|
||||
"wBackLogin": "Back to login",
|
||||
|
||||
@@ -20,13 +20,12 @@
|
||||
"hideConfirmation": "Скрыть повтор пароля",
|
||||
"createAccount": "Создать аккаунт",
|
||||
"letsGo": "Продолжить",
|
||||
"loginPreview": "Демонстрационный вход выполнен. Реальная сессия не создана. Учётные данные не отправлены и не сохранены.",
|
||||
"signupPreview": "Демонстрационная регистрация выполнена. Реальный аккаунт не создан. Учётные данные не отправлены и не сохранены.",
|
||||
"loginPreview": "Вы вошли в аккаунт.",
|
||||
"signupPreview": "Ваш аккаунт готов.",
|
||||
"alreadyMember": "Уже есть аккаунт sxchnge?",
|
||||
"newHere": "Впервые здесь?",
|
||||
"loginInstead": "Войти в аккаунт",
|
||||
"createAnAccount": "Зарегистрироваться",
|
||||
"earlyPreview": "ПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ · Вход и регистрация пока недоступны.",
|
||||
"brandEyebrow": "МАЛЕНЬКАЯ ПЕРЕМЕНА. БОЛЬШОЙ ШАГ.",
|
||||
"brandHeading": "Всё начинается\nс перемен.",
|
||||
"brandIntro": "Новый путь вперёд.\nОткройте его вместе со sxchnge.",
|
||||
@@ -63,19 +62,12 @@
|
||||
"verificationRetry": "Повторить подтверждение",
|
||||
"verificationBack": "Вернуться ко входу",
|
||||
"verificationHint": "Нет письма? Проверьте папку «Спам» или запросите новое ниже.",
|
||||
"verificationDemo": "ДЕМО · Письмо не отправляется, реальный аккаунт не подтверждается.",
|
||||
"verificationDemoLink": "Открыть демоссылку подтверждения",
|
||||
"verificationDemoLink": "Перейти к подтверждению",
|
||||
"verificationStep": "ПОДТВЕРДИТЕ ПОЧТУ",
|
||||
"demoSentHeading": "Демописьмо готово.",
|
||||
"demoSentBody": "Письмо не отправлено. Используйте демоссылку ниже, чтобы посмотреть следующий шаг.",
|
||||
"demoVerifiedHeading": "Демоподтверждение\nзавершено.",
|
||||
"demoVerifiedBody": "Вы посмотрели подтверждение почты. Реальный аккаунт не подтверждён. Вернитесь ко входу, чтобы продолжить знакомство с демоверсией.",
|
||||
"verificationRecipient": "Получатель",
|
||||
"verificationChangeEmail": "Изменить почту",
|
||||
"demoResend": "Подготовить демописьмо ещё раз",
|
||||
"kycTitle": "Верификация и лимиты",
|
||||
"kycIntro": "Ваш аккаунт — ваш темп. Подтвердите личность, когда понадобятся более высокие лимиты.",
|
||||
"kycDemo": "ДЕМО · Используйте только тестовые изображения. Фото хранятся в памяти, не отправляются и удаляются при выходе или перезагрузке. Решения проверки имитируются.",
|
||||
"kycUnverified": "Личность не подтверждена",
|
||||
"kycPending": "На проверке",
|
||||
"kycApproved": "Личность подтверждена",
|
||||
@@ -94,11 +86,10 @@
|
||||
"kycResubmit": "Заменить фото",
|
||||
"kycRefresh": "Обновить статус и лимиты",
|
||||
"kycSupport": "Обратиться в поддержку",
|
||||
"kycSupportBody": "В демоверсии поддержка не подключена. В рабочем приложении здесь можно будет запросить пересмотр без повторной отправки документов.",
|
||||
"kycSupportBody": "Поддержка сейчас недоступна. Попробуйте позже.",
|
||||
"kycBasic": "Базовый",
|
||||
"kycVerifiedTier": "Подтверждённый",
|
||||
"kycLimits": "Ваши лимиты",
|
||||
"kycLimitsDemo": "Пример лимитов из демосервиса. Это не действующее предложение.",
|
||||
"kycDay": "Объём за день",
|
||||
"kycMonth": "Объём за месяц",
|
||||
"kycCurrent": "Текущий лимит",
|
||||
@@ -119,11 +110,10 @@
|
||||
"kycNext": "Продолжить",
|
||||
"kycBack": "Назад",
|
||||
"kycSkip": "Оставить базовые лимиты",
|
||||
"kycClose": "К демоаккаунту",
|
||||
"kycClose": "К аккаунту",
|
||||
"kycReviewHelp": "Убедитесь, что оба фото читаемы и на них один паспорт. Их проверит сотрудник. Отправка не повышает лимиты сразу.",
|
||||
"kycConfirm": "На фото я и мой действующий паспорт.",
|
||||
"kycSubmit": "Отправить на проверку",
|
||||
"kycSubmitDemo": "Имитировать отправку",
|
||||
"kycWorking": "Обработка… Не закрывайте страницу.",
|
||||
"kycDiscardTitle": "Удалить выбранные фото?",
|
||||
"kycDiscardBody": "Черновик хранится только в памяти. При выходе выбранные фото будут удалены. Позже можно начать заново.",
|
||||
@@ -140,7 +130,7 @@
|
||||
"kycErrorSession": "Сессия истекла. Войдите снова и проверьте статус верификации.",
|
||||
"kycErrorRate": "Слишком много запросов. Немного подождите и повторите попытку.",
|
||||
"kycErrorConflict": "Статус проверки изменился. Обновите его, прежде чем продолжить.",
|
||||
"kycDemoControls": "Демо: имитация решения сотрудника",
|
||||
"kycDemoControls": "Сценарии проверки",
|
||||
"kycDemoApprove": "Одобрить",
|
||||
"kycDemoCorrect": "Запросить чёткое фото паспорта",
|
||||
"kycDemoSelfie": "Запросить чёткое селфи",
|
||||
@@ -169,13 +159,12 @@
|
||||
"wEmptyActivity": "Ваш следующий шаг начинается здесь. Здесь появятся ваши операции.",
|
||||
"wEmptyAccounts": "Ваши счета ещё не готовы. Попробуйте обновить страницу.",
|
||||
"wRefresh": "Обновить",
|
||||
"wDemo": "Демонстрация · Реальные деньги не переводятся.",
|
||||
"wSource": "Со счёта",
|
||||
"wDestination": "На счёт",
|
||||
"wReceiveAccount": "Счёт для зачисления",
|
||||
"wAmount": "Сумма",
|
||||
"wRecipient": "Получатель",
|
||||
"wRecipientHint": "Тестовый получатель — только демо",
|
||||
"wRecipientHint": "Имя или реквизиты получателя",
|
||||
"wReview": "Проверить",
|
||||
"wReviewTitle": "Проверьте детали.",
|
||||
"wFee": "Комиссия",
|
||||
@@ -187,7 +176,7 @@
|
||||
"wQuoteNotice": "Эти условия действуют 60 секунд. Подтвердите их, прежде чем продолжить.",
|
||||
"wExpired": "Срок действия расчёта истёк. Обновите его и проверьте новые условия.",
|
||||
"wNewQuote": "Обновить расчёт",
|
||||
"wConfirm": "Подтвердить тестовую операцию",
|
||||
"wConfirm": "Подтвердить операцию",
|
||||
"wEdit": "Изменить данные",
|
||||
"wClose": "Закрыть",
|
||||
"wWorking": "Обрабатываем…",
|
||||
@@ -202,8 +191,6 @@
|
||||
"wCompletePayout": "Вывод завершён. Сумма и комиссия списаны с вашего счёта.",
|
||||
"wFailedTopUp": "Пополнение не выполнено. На счёт ничего не зачислено.",
|
||||
"wFailedOutgoing": "Операция не выполнена. Сумма и комиссия снова доступны на вашем счёте.",
|
||||
"wDemoMethod": "Тестовый перевод",
|
||||
"wDemoMethodHelp": "Попробуйте сценарий с тестовыми данными. Банки и платёжные системы не подключены.",
|
||||
"wUnavailable": "Не удалось обновить данные. Информация может быть устаревшей. Повторите попытку.",
|
||||
"wInvalidAmount": "Введите сумму больше нуля с допустимым для валюты числом знаков после запятой.",
|
||||
"wInsufficient": "Для этой суммы и комиссии недостаточно доступных средств. Пополните счёт или уменьшите сумму.",
|
||||
@@ -227,11 +214,11 @@
|
||||
"wPreferences": "Настройте под себя.",
|
||||
"wLanguage": "Язык аккаунта",
|
||||
"wLanguageHelp": "Используется во всём аккаунте.",
|
||||
"wLanguageSaved": "Сохранено в тестовом аккаунте.",
|
||||
"wLanguageSaved": "Сохранено в аккаунте.",
|
||||
"wLanguageFailed": "Изменено для текущей сессии, но не сохранено в аккаунте. Повторите попытку ниже.",
|
||||
"wProfileError": "Не удалось загрузить настройки аккаунта. Повторите попытку.",
|
||||
"wSecurity": "Безопасность",
|
||||
"wSecurityBody": "В этой демонстрации не подключены рабочие сессии, смена пароля и двухэтапная проверка.",
|
||||
"wSecurityBody": "Настройки пароля и безопасности пока недоступны.",
|
||||
"wIdentity": "Подтверждение личности",
|
||||
"wIdentityHelp": "Необязательная проверка для повышения лимитов.",
|
||||
"wBackLogin": "Вернуться ко входу",
|
||||
|
||||
@@ -127,11 +127,10 @@ class _VerificationPageState extends State<VerificationPage> {
|
||||
!_lastWasSend &&
|
||||
widget.token != null;
|
||||
final title = switch (status) {
|
||||
VerificationStatus.sent => demo ? l.demoSentHeading : l.checkInbox,
|
||||
VerificationStatus.sent => l.checkInbox,
|
||||
VerificationStatus.sending => l.verificationSending,
|
||||
VerificationStatus.checking => l.verificationChecking,
|
||||
VerificationStatus.verified =>
|
||||
demo ? l.demoVerifiedHeading : l.verificationVerified,
|
||||
VerificationStatus.verified => l.verificationVerified,
|
||||
VerificationStatus.expired => l.verificationExpired,
|
||||
VerificationStatus.invalid => l.verificationInvalid,
|
||||
VerificationStatus.error => l.verificationInternal,
|
||||
@@ -141,9 +140,8 @@ class _VerificationPageState extends State<VerificationPage> {
|
||||
: l.verificationRequest,
|
||||
};
|
||||
final body = switch (status) {
|
||||
VerificationStatus.sent => demo ? l.demoSentBody : l.verificationSent,
|
||||
VerificationStatus.verified =>
|
||||
demo ? l.demoVerifiedBody : l.verificationVerifiedBody,
|
||||
VerificationStatus.sent => l.verificationSent,
|
||||
VerificationStatus.verified => l.verificationVerifiedBody,
|
||||
VerificationStatus.expired => l.verificationExpiredBody,
|
||||
VerificationStatus.invalid => l.verificationInvalidBody,
|
||||
VerificationStatus.error => l.verificationInternalBody,
|
||||
@@ -200,13 +198,6 @@ class _VerificationPageState extends State<VerificationPage> {
|
||||
color: colors.primary,
|
||||
),
|
||||
),
|
||||
if (demo) ...[
|
||||
const SizedBox(height: 12),
|
||||
Text(
|
||||
l.verificationDemo,
|
||||
style: theme.textTheme.bodyMedium,
|
||||
),
|
||||
],
|
||||
const SizedBox(height: 12),
|
||||
Semantics(
|
||||
liveRegion: true,
|
||||
@@ -258,7 +249,7 @@ class _VerificationPageState extends State<VerificationPage> {
|
||||
key: const ValueKey('verification-resend'),
|
||||
onPressed: _send,
|
||||
child: Text(
|
||||
demo ? l.demoResend : l.verificationResend,
|
||||
l.verificationResend,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
|
||||
@@ -63,18 +63,14 @@ class _WorkspaceShellState extends State<WorkspaceShell> {
|
||||
final wide = MediaQuery.sizeOf(context).width >= 900;
|
||||
final content = Column(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),
|
||||
child: Column(
|
||||
crossAxisAlignment: wide
|
||||
? CrossAxisAlignment.end
|
||||
: CrossAxisAlignment.start,
|
||||
children: [
|
||||
if (!wide) ...[const BrandWordmark(), const SizedBox(height: 8)],
|
||||
Text(l.wDemo, style: t.textTheme.bodySmall),
|
||||
],
|
||||
if (!wide)
|
||||
const Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12),
|
||||
child: Align(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: BrandWordmark(),
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(child: widget.child),
|
||||
],
|
||||
);
|
||||
|
||||
@@ -138,8 +138,6 @@ class TransferPageState extends State<TransferPage> {
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
Text(l.wDemoMethodHelp, style: t.textTheme.bodySmall),
|
||||
const SizedBox(height: 24),
|
||||
Focus(
|
||||
key: _content,
|
||||
focusNode: _focus,
|
||||
|
||||
@@ -129,7 +129,7 @@ void main() {
|
||||
same(router),
|
||||
);
|
||||
expect(find.byKey(const ValueKey('verification-verified')), findsOneWidget);
|
||||
expect(find.text('Демоподтверждение\nзавершено.'), findsOneWidget);
|
||||
expect(find.text('Ваша почта\nподтверждена.'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
|
||||
@@ -111,7 +111,7 @@ void main() {
|
||||
);
|
||||
|
||||
testWidgets(
|
||||
'signup to demo verification is correlated and never claims a business success',
|
||||
'signup verification keeps simulated analytics with ordinary product copy',
|
||||
(tester) async {
|
||||
final sink = DummyAnalyticsService();
|
||||
await open(tester, '/', sink);
|
||||
@@ -130,10 +130,10 @@ void main() {
|
||||
'example-password',
|
||||
);
|
||||
await tap(tester, find.byKey(const ValueKey('submit')));
|
||||
expect(find.text('Demo email prepared.'), findsOneWidget);
|
||||
expect(find.textContaining('We’ve sent you'), findsNothing);
|
||||
expect(find.text('Check your inbox.'), findsOneWidget);
|
||||
expect(find.textContaining('We’ve sent you'), findsOneWidget);
|
||||
await tap(tester, find.byKey(const ValueKey('demo-confirmation')));
|
||||
expect(find.text('Demo verification\ncomplete.'), findsOneWidget);
|
||||
expect(find.text('Your email\nis verified.'), findsOneWidget);
|
||||
expect(sink.events.map((e) => e.journeyId).toSet().length, 1);
|
||||
expect(sink.events.where((e) => e.terminal).length, 1);
|
||||
expect(
|
||||
|
||||
@@ -57,7 +57,7 @@ void main() {
|
||||
find.byKey(ValueKey('verification-${scenario.value}')),
|
||||
findsOneWidget,
|
||||
);
|
||||
expect(find.textContaining('DEMO'), findsOneWidget);
|
||||
expect(find.textContaining('DEMO'), findsNothing);
|
||||
expect(tester.takeException(), isNull);
|
||||
},
|
||||
);
|
||||
|
||||
Reference in new issue
Block a user