diff --git a/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/request_phone/request_link_phone_screen.dart b/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/request_phone/request_link_phone_screen.dart index d5928df5..66da021e 100644 --- a/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/request_phone/request_link_phone_screen.dart +++ b/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/request_phone/request_link_phone_screen.dart @@ -59,11 +59,10 @@ class LegacyRequestLinkPhoneScreen extends ConsumerWidget { children: [ CountryPrefixPicker( headerText: context.translate(I18n.selectYourCountry), - initialSelection: viewState.dialCode, + initialSelection: viewState.isoCode, onChanged: (country) { - viewModel.updateDialCode( - country.dialCode ?? viewState.dialCode, - ); + final code = country.code; + if (code != null) viewModel.updateCountry(code); }, ), Expanded( @@ -83,7 +82,7 @@ class LegacyRequestLinkPhoneScreen extends ConsumerWidget { if (viewState.errorMessage.isNotEmpty) ...[ const SizedBox(height: 4), Text( - viewState.errorMessage, + context.translate(viewState.errorMessage), textAlign: TextAlign.center, style: const TextStyle( color: Color.fromRGBO(239, 17, 17, 1), diff --git a/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/state/link_phone_view_model.dart b/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/state/link_phone_view_model.dart index 8c22ea1d..ed8ba817 100644 --- a/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/state/link_phone_view_model.dart +++ b/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/state/link_phone_view_model.dart @@ -1,12 +1,13 @@ import 'dart:async'; -import 'package:legacy_auth/src/features/link_phone/presentation/providers/link_phone_provider.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:sf_tracking/sf_tracking.dart'; - import 'package:legacy_auth/src/features/link_phone/domain/use_cases/link_phone_use_case.dart'; +import 'package:legacy_auth/src/features/link_phone/presentation/providers/link_phone_provider.dart'; import 'package:legacy_auth/src/features/link_phone/presentation/state/link_phone_view_state.dart'; +import 'package:sf_localizations/sf_localizations.dart'; +import 'package:sf_shared/sf_shared.dart'; +import 'package:sf_tracking/sf_tracking.dart'; final legacyLinkPhoneViewModelProvider = NotifierProvider.autoDispose< @@ -36,17 +37,17 @@ class LegacyLinkPhoneViewModel extends Notifier { } void _onPhoneNumberChanged() { - final raw = phoneNumberController.text; state = state.copyWith( - phoneNumber: raw, + phoneNumber: phoneNumberController.text, errorMessage: '', codeVerified: false, ); } - void updateDialCode(String dialCode) { + void updateCountry(String isoCode) { + if (isoCode == state.isoCode) return; state = state.copyWith( - dialCode: dialCode, + isoCode: isoCode, errorMessage: '', codeVerified: false, ); @@ -57,18 +58,33 @@ class LegacyLinkPhoneViewModel extends Notifier { state = state.copyWith(errorMessage: '', codeVerified: false); } - Future requestCode() async { - final trimmedNumber = state.phoneNumber.trim(); - - if (trimmedNumber.isEmpty) { + SfPhoneNumber? _parsePhone() { + if (state.phoneNumber.trim().isEmpty) { state = state.copyWith( - errorMessage: 'errorMessagePhoneIsEmpty', + errorMessage: I18n.errorMessagePhoneIsEmpty, codeVerified: false, ); - return; + return null; } - final fullPhone = '${state.dialCode}$trimmedNumber'; + final parsed = SfPhoneNumber.tryParse( + state.phoneNumber, + defaultIsoCode: state.isoCode, + ); + if (parsed == null) { + state = state.copyWith( + errorMessage: I18n.errorMessagePhoneIsInvalid, + codeVerified: false, + ); + return null; + } + + return parsed; + } + + Future requestCode() async { + final parsed = _parsePhone(); + if (parsed == null) return; state = state.copyWith( isLoading: true, @@ -78,15 +94,15 @@ class LegacyLinkPhoneViewModel extends Notifier { ); try { - await _linkPhoneUseCase.requestCode(phone: fullPhone); + await _linkPhoneUseCase.requestCode(phone: parsed.e164); if (!ref.mounted) return; unawaited(_tracking.legacyAuthLinkPhoneCodeRequested()); state = state.copyWith( isLoading: false, - errorMessage: '', codeRequested: true, + sentTo: parsed.format(), ); } catch (e) { if (!ref.mounted) return; @@ -95,7 +111,7 @@ class LegacyLinkPhoneViewModel extends Notifier { state = state.copyWith( isLoading: false, - errorMessage: e.toString(), + errorMessage: I18n.errorGeneric, codeRequested: false, codeVerified: false, ); @@ -103,22 +119,13 @@ class LegacyLinkPhoneViewModel extends Notifier { } Future verifyCode() async { - final dialCode = state.dialCode; - final phoneNumber = state.phoneNumber.trim(); + final parsed = _parsePhone(); + if (parsed == null) return; + final code = codeController.text.trim(); - final fullPhone = '$dialCode$phoneNumber'; - - if (phoneNumber.isEmpty) { - state = state.copyWith( - errorMessage: 'errorMessagePhoneIsEmpty', - codeVerified: false, - ); - return; - } - if (code.isEmpty) { state = state.copyWith( - errorMessage: 'errorMessageCodeIsEmpty', + errorMessage: I18n.errorMessageCodeIsEmpty, codeVerified: false, ); return; @@ -131,16 +138,12 @@ class LegacyLinkPhoneViewModel extends Notifier { ); try { - await _linkPhoneUseCase.verifyCode(phone: fullPhone, code: code); + await _linkPhoneUseCase.verifyCode(phone: parsed.e164, code: code); if (!ref.mounted) return; unawaited(_tracking.legacyAuthLinkPhoneCodeVerified()); - state = state.copyWith( - isLoading: false, - errorMessage: '', - codeVerified: true, - ); + state = state.copyWith(isLoading: false, codeVerified: true); } catch (e) { if (!ref.mounted) return; @@ -150,7 +153,7 @@ class LegacyLinkPhoneViewModel extends Notifier { state = state.copyWith( isLoading: false, - errorMessage: e.toString(), + errorMessage: I18n.errorGeneric, codeVerified: false, ); } diff --git a/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/state/link_phone_view_state.dart b/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/state/link_phone_view_state.dart index 70ffd15c..305b058f 100644 --- a/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/state/link_phone_view_state.dart +++ b/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/state/link_phone_view_state.dart @@ -6,7 +6,8 @@ part 'link_phone_view_state.freezed.dart'; abstract class LegacyLinkPhoneViewState with _$LegacyLinkPhoneViewState { const factory LegacyLinkPhoneViewState({ @Default('') String phoneNumber, - @Default('+34') String dialCode, + @Default('ES') String isoCode, + @Default('') String sentTo, @Default('') String errorMessage, @Default(false) bool isLoading, @Default(false) bool codeRequested, diff --git a/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/state/link_phone_view_state.freezed.dart b/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/state/link_phone_view_state.freezed.dart index 30a86518..d9bb2593 100644 --- a/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/state/link_phone_view_state.freezed.dart +++ b/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/state/link_phone_view_state.freezed.dart @@ -14,7 +14,7 @@ T _$identity(T value) => value; /// @nodoc mixin _$LegacyLinkPhoneViewState { - String get phoneNumber; String get dialCode; String get errorMessage; bool get isLoading; bool get codeRequested; bool get codeVerified; + String get phoneNumber; String get isoCode; String get sentTo; String get errorMessage; bool get isLoading; bool get codeRequested; bool get codeVerified; /// Create a copy of LegacyLinkPhoneViewState /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) @@ -25,16 +25,16 @@ $LegacyLinkPhoneViewStateCopyWith get copyWith => _$Le @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is LegacyLinkPhoneViewState&&(identical(other.phoneNumber, phoneNumber) || other.phoneNumber == phoneNumber)&&(identical(other.dialCode, dialCode) || other.dialCode == dialCode)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage)&&(identical(other.isLoading, isLoading) || other.isLoading == isLoading)&&(identical(other.codeRequested, codeRequested) || other.codeRequested == codeRequested)&&(identical(other.codeVerified, codeVerified) || other.codeVerified == codeVerified)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is LegacyLinkPhoneViewState&&(identical(other.phoneNumber, phoneNumber) || other.phoneNumber == phoneNumber)&&(identical(other.isoCode, isoCode) || other.isoCode == isoCode)&&(identical(other.sentTo, sentTo) || other.sentTo == sentTo)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage)&&(identical(other.isLoading, isLoading) || other.isLoading == isLoading)&&(identical(other.codeRequested, codeRequested) || other.codeRequested == codeRequested)&&(identical(other.codeVerified, codeVerified) || other.codeVerified == codeVerified)); } @override -int get hashCode => Object.hash(runtimeType,phoneNumber,dialCode,errorMessage,isLoading,codeRequested,codeVerified); +int get hashCode => Object.hash(runtimeType,phoneNumber,isoCode,sentTo,errorMessage,isLoading,codeRequested,codeVerified); @override String toString() { - return 'LegacyLinkPhoneViewState(phoneNumber: $phoneNumber, dialCode: $dialCode, errorMessage: $errorMessage, isLoading: $isLoading, codeRequested: $codeRequested, codeVerified: $codeVerified)'; + return 'LegacyLinkPhoneViewState(phoneNumber: $phoneNumber, isoCode: $isoCode, sentTo: $sentTo, errorMessage: $errorMessage, isLoading: $isLoading, codeRequested: $codeRequested, codeVerified: $codeVerified)'; } @@ -45,7 +45,7 @@ abstract mixin class $LegacyLinkPhoneViewStateCopyWith<$Res> { factory $LegacyLinkPhoneViewStateCopyWith(LegacyLinkPhoneViewState value, $Res Function(LegacyLinkPhoneViewState) _then) = _$LegacyLinkPhoneViewStateCopyWithImpl; @useResult $Res call({ - String phoneNumber, String dialCode, String errorMessage, bool isLoading, bool codeRequested, bool codeVerified + String phoneNumber, String isoCode, String sentTo, String errorMessage, bool isLoading, bool codeRequested, bool codeVerified }); @@ -62,10 +62,11 @@ class _$LegacyLinkPhoneViewStateCopyWithImpl<$Res> /// Create a copy of LegacyLinkPhoneViewState /// with the given fields replaced by the non-null parameter values. -@pragma('vm:prefer-inline') @override $Res call({Object? phoneNumber = null,Object? dialCode = null,Object? errorMessage = null,Object? isLoading = null,Object? codeRequested = null,Object? codeVerified = null,}) { +@pragma('vm:prefer-inline') @override $Res call({Object? phoneNumber = null,Object? isoCode = null,Object? sentTo = null,Object? errorMessage = null,Object? isLoading = null,Object? codeRequested = null,Object? codeVerified = null,}) { return _then(_self.copyWith( phoneNumber: null == phoneNumber ? _self.phoneNumber : phoneNumber // ignore: cast_nullable_to_non_nullable -as String,dialCode: null == dialCode ? _self.dialCode : dialCode // ignore: cast_nullable_to_non_nullable +as String,isoCode: null == isoCode ? _self.isoCode : isoCode // ignore: cast_nullable_to_non_nullable +as String,sentTo: null == sentTo ? _self.sentTo : sentTo // ignore: cast_nullable_to_non_nullable as String,errorMessage: null == errorMessage ? _self.errorMessage : errorMessage // ignore: cast_nullable_to_non_nullable as String,isLoading: null == isLoading ? _self.isLoading : isLoading // ignore: cast_nullable_to_non_nullable as bool,codeRequested: null == codeRequested ? _self.codeRequested : codeRequested // ignore: cast_nullable_to_non_nullable @@ -155,10 +156,10 @@ return $default(_that);case _: /// } /// ``` -@optionalTypeArgs TResult maybeWhen(TResult Function( String phoneNumber, String dialCode, String errorMessage, bool isLoading, bool codeRequested, bool codeVerified)? $default,{required TResult orElse(),}) {final _that = this; +@optionalTypeArgs TResult maybeWhen(TResult Function( String phoneNumber, String isoCode, String sentTo, String errorMessage, bool isLoading, bool codeRequested, bool codeVerified)? $default,{required TResult orElse(),}) {final _that = this; switch (_that) { case _LegacyLinkPhoneViewState() when $default != null: -return $default(_that.phoneNumber,_that.dialCode,_that.errorMessage,_that.isLoading,_that.codeRequested,_that.codeVerified);case _: +return $default(_that.phoneNumber,_that.isoCode,_that.sentTo,_that.errorMessage,_that.isLoading,_that.codeRequested,_that.codeVerified);case _: return orElse(); } @@ -176,10 +177,10 @@ return $default(_that.phoneNumber,_that.dialCode,_that.errorMessage,_that.isLoad /// } /// ``` -@optionalTypeArgs TResult when(TResult Function( String phoneNumber, String dialCode, String errorMessage, bool isLoading, bool codeRequested, bool codeVerified) $default,) {final _that = this; +@optionalTypeArgs TResult when(TResult Function( String phoneNumber, String isoCode, String sentTo, String errorMessage, bool isLoading, bool codeRequested, bool codeVerified) $default,) {final _that = this; switch (_that) { case _LegacyLinkPhoneViewState(): -return $default(_that.phoneNumber,_that.dialCode,_that.errorMessage,_that.isLoading,_that.codeRequested,_that.codeVerified);case _: +return $default(_that.phoneNumber,_that.isoCode,_that.sentTo,_that.errorMessage,_that.isLoading,_that.codeRequested,_that.codeVerified);case _: throw StateError('Unexpected subclass'); } @@ -196,10 +197,10 @@ return $default(_that.phoneNumber,_that.dialCode,_that.errorMessage,_that.isLoad /// } /// ``` -@optionalTypeArgs TResult? whenOrNull(TResult? Function( String phoneNumber, String dialCode, String errorMessage, bool isLoading, bool codeRequested, bool codeVerified)? $default,) {final _that = this; +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String phoneNumber, String isoCode, String sentTo, String errorMessage, bool isLoading, bool codeRequested, bool codeVerified)? $default,) {final _that = this; switch (_that) { case _LegacyLinkPhoneViewState() when $default != null: -return $default(_that.phoneNumber,_that.dialCode,_that.errorMessage,_that.isLoading,_that.codeRequested,_that.codeVerified);case _: +return $default(_that.phoneNumber,_that.isoCode,_that.sentTo,_that.errorMessage,_that.isLoading,_that.codeRequested,_that.codeVerified);case _: return null; } @@ -211,11 +212,12 @@ return $default(_that.phoneNumber,_that.dialCode,_that.errorMessage,_that.isLoad class _LegacyLinkPhoneViewState implements LegacyLinkPhoneViewState { - const _LegacyLinkPhoneViewState({this.phoneNumber = '', this.dialCode = '+34', this.errorMessage = '', this.isLoading = false, this.codeRequested = false, this.codeVerified = false}); + const _LegacyLinkPhoneViewState({this.phoneNumber = '', this.isoCode = 'ES', this.sentTo = '', this.errorMessage = '', this.isLoading = false, this.codeRequested = false, this.codeVerified = false}); @override@JsonKey() final String phoneNumber; -@override@JsonKey() final String dialCode; +@override@JsonKey() final String isoCode; +@override@JsonKey() final String sentTo; @override@JsonKey() final String errorMessage; @override@JsonKey() final bool isLoading; @override@JsonKey() final bool codeRequested; @@ -231,16 +233,16 @@ _$LegacyLinkPhoneViewStateCopyWith<_LegacyLinkPhoneViewState> get copyWith => __ @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is _LegacyLinkPhoneViewState&&(identical(other.phoneNumber, phoneNumber) || other.phoneNumber == phoneNumber)&&(identical(other.dialCode, dialCode) || other.dialCode == dialCode)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage)&&(identical(other.isLoading, isLoading) || other.isLoading == isLoading)&&(identical(other.codeRequested, codeRequested) || other.codeRequested == codeRequested)&&(identical(other.codeVerified, codeVerified) || other.codeVerified == codeVerified)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is _LegacyLinkPhoneViewState&&(identical(other.phoneNumber, phoneNumber) || other.phoneNumber == phoneNumber)&&(identical(other.isoCode, isoCode) || other.isoCode == isoCode)&&(identical(other.sentTo, sentTo) || other.sentTo == sentTo)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage)&&(identical(other.isLoading, isLoading) || other.isLoading == isLoading)&&(identical(other.codeRequested, codeRequested) || other.codeRequested == codeRequested)&&(identical(other.codeVerified, codeVerified) || other.codeVerified == codeVerified)); } @override -int get hashCode => Object.hash(runtimeType,phoneNumber,dialCode,errorMessage,isLoading,codeRequested,codeVerified); +int get hashCode => Object.hash(runtimeType,phoneNumber,isoCode,sentTo,errorMessage,isLoading,codeRequested,codeVerified); @override String toString() { - return 'LegacyLinkPhoneViewState(phoneNumber: $phoneNumber, dialCode: $dialCode, errorMessage: $errorMessage, isLoading: $isLoading, codeRequested: $codeRequested, codeVerified: $codeVerified)'; + return 'LegacyLinkPhoneViewState(phoneNumber: $phoneNumber, isoCode: $isoCode, sentTo: $sentTo, errorMessage: $errorMessage, isLoading: $isLoading, codeRequested: $codeRequested, codeVerified: $codeVerified)'; } @@ -251,7 +253,7 @@ abstract mixin class _$LegacyLinkPhoneViewStateCopyWith<$Res> implements $Legacy factory _$LegacyLinkPhoneViewStateCopyWith(_LegacyLinkPhoneViewState value, $Res Function(_LegacyLinkPhoneViewState) _then) = __$LegacyLinkPhoneViewStateCopyWithImpl; @override @useResult $Res call({ - String phoneNumber, String dialCode, String errorMessage, bool isLoading, bool codeRequested, bool codeVerified + String phoneNumber, String isoCode, String sentTo, String errorMessage, bool isLoading, bool codeRequested, bool codeVerified }); @@ -268,10 +270,11 @@ class __$LegacyLinkPhoneViewStateCopyWithImpl<$Res> /// Create a copy of LegacyLinkPhoneViewState /// with the given fields replaced by the non-null parameter values. -@override @pragma('vm:prefer-inline') $Res call({Object? phoneNumber = null,Object? dialCode = null,Object? errorMessage = null,Object? isLoading = null,Object? codeRequested = null,Object? codeVerified = null,}) { +@override @pragma('vm:prefer-inline') $Res call({Object? phoneNumber = null,Object? isoCode = null,Object? sentTo = null,Object? errorMessage = null,Object? isLoading = null,Object? codeRequested = null,Object? codeVerified = null,}) { return _then(_LegacyLinkPhoneViewState( phoneNumber: null == phoneNumber ? _self.phoneNumber : phoneNumber // ignore: cast_nullable_to_non_nullable -as String,dialCode: null == dialCode ? _self.dialCode : dialCode // ignore: cast_nullable_to_non_nullable +as String,isoCode: null == isoCode ? _self.isoCode : isoCode // ignore: cast_nullable_to_non_nullable +as String,sentTo: null == sentTo ? _self.sentTo : sentTo // ignore: cast_nullable_to_non_nullable as String,errorMessage: null == errorMessage ? _self.errorMessage : errorMessage // ignore: cast_nullable_to_non_nullable as String,isLoading: null == isLoading ? _self.isLoading : isLoading // ignore: cast_nullable_to_non_nullable as bool,codeRequested: null == codeRequested ? _self.codeRequested : codeRequested // ignore: cast_nullable_to_non_nullable diff --git a/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/verify_code/verify_link_phone_code_screen.dart b/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/verify_code/verify_link_phone_code_screen.dart index 8b766c41..85db64ac 100644 --- a/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/verify_code/verify_link_phone_code_screen.dart +++ b/modules/legacy/modules/legacy_auth/lib/src/features/link_phone/presentation/verify_code/verify_link_phone_code_screen.dart @@ -42,7 +42,7 @@ class LegacyVerifyLinkPhoneCodeScreen extends ConsumerWidget { text: context.translate(I18n.verificationCodeSentTo), children: [ TextSpan( - text: '${viewState.dialCode}${viewState.phoneNumber}', + text: viewState.sentTo, style: const TextStyle( fontWeight: FontWeight.bold, fontSize: 18, @@ -67,7 +67,7 @@ class LegacyVerifyLinkPhoneCodeScreen extends ConsumerWidget { if (viewState.errorMessage.isNotEmpty) ...[ const SizedBox(height: 8), Text( - viewState.errorMessage, + context.translate(viewState.errorMessage), textAlign: TextAlign.center, style: const TextStyle( color: Color.fromRGBO(239, 17, 17, 1), diff --git a/packages/sf_localizations/assets/l10n/de.json b/packages/sf_localizations/assets/l10n/de.json index bca4eded..d6b7b3b1 100644 --- a/packages/sf_localizations/assets/l10n/de.json +++ b/packages/sf_localizations/assets/l10n/de.json @@ -865,5 +865,6 @@ "appUpdateLater": "Später", "appUpdateNow": "Jetzt aktualisieren", "contactsPermissionBlocked": "Aktiviere die Kontakte-Berechtigung in den Systemeinstellungen, um zu importieren.", - "openSettings": "Einstellungen öffnen" + "openSettings": "Einstellungen öffnen", + "errorMessageCodeIsEmpty": "Der Code darf nicht leer sein" } diff --git a/packages/sf_localizations/assets/l10n/en.json b/packages/sf_localizations/assets/l10n/en.json index 756c5cf8..143eae96 100755 --- a/packages/sf_localizations/assets/l10n/en.json +++ b/packages/sf_localizations/assets/l10n/en.json @@ -865,5 +865,6 @@ "appUpdateLater": "Later", "appUpdateNow": "Update now", "contactsPermissionBlocked": "Enable the contacts permission in system settings to import.", - "openSettings": "Open settings" + "openSettings": "Open settings", + "errorMessageCodeIsEmpty": "The code cannot be empty" } diff --git a/packages/sf_localizations/assets/l10n/es.json b/packages/sf_localizations/assets/l10n/es.json index 47bfcf35..3b84d73a 100644 --- a/packages/sf_localizations/assets/l10n/es.json +++ b/packages/sf_localizations/assets/l10n/es.json @@ -865,5 +865,6 @@ "appUpdateLater": "Más tarde", "appUpdateNow": "Actualizar ahora", "contactsPermissionBlocked": "Activa el permiso de contactos en los ajustes del sistema para importar.", - "openSettings": "Abrir ajustes" + "openSettings": "Abrir ajustes", + "errorMessageCodeIsEmpty": "El código no puede estar vacío" } diff --git a/packages/sf_localizations/assets/l10n/fr.json b/packages/sf_localizations/assets/l10n/fr.json index f84a0f93..95c284a0 100644 --- a/packages/sf_localizations/assets/l10n/fr.json +++ b/packages/sf_localizations/assets/l10n/fr.json @@ -865,5 +865,6 @@ "appUpdateLater": "Plus tard", "appUpdateNow": "Mettre à jour maintenant", "contactsPermissionBlocked": "Active la permission des contacts dans les paramètres pour importer.", - "openSettings": "Ouvrir les paramètres" + "openSettings": "Ouvrir les paramètres", + "errorMessageCodeIsEmpty": "Le code ne peut pas être vide" } diff --git a/packages/sf_localizations/assets/l10n/it.json b/packages/sf_localizations/assets/l10n/it.json index 0dfd60ac..f7644c98 100644 --- a/packages/sf_localizations/assets/l10n/it.json +++ b/packages/sf_localizations/assets/l10n/it.json @@ -865,5 +865,6 @@ "appUpdateLater": "Più tardi", "appUpdateNow": "Aggiorna ora", "contactsPermissionBlocked": "Attiva il permesso dei contatti nelle impostazioni per importare.", - "openSettings": "Apri impostazioni" + "openSettings": "Apri impostazioni", + "errorMessageCodeIsEmpty": "Il codice non può essere vuoto" } diff --git a/packages/sf_localizations/assets/l10n/pt.json b/packages/sf_localizations/assets/l10n/pt.json index d63818c9..fad817e2 100644 --- a/packages/sf_localizations/assets/l10n/pt.json +++ b/packages/sf_localizations/assets/l10n/pt.json @@ -865,5 +865,6 @@ "appUpdateLater": "Mais tarde", "appUpdateNow": "Atualizar agora", "contactsPermissionBlocked": "Ativa a permissão de contactos nas definições para importar.", - "openSettings": "Abrir definições" + "openSettings": "Abrir definições", + "errorMessageCodeIsEmpty": "O código não pode estar vazio" } diff --git a/packages/sf_localizations/lib/src/generated/i18n.dart b/packages/sf_localizations/lib/src/generated/i18n.dart index 4fafa503..88eda3d7 100755 --- a/packages/sf_localizations/lib/src/generated/i18n.dart +++ b/packages/sf_localizations/lib/src/generated/i18n.dart @@ -370,6 +370,7 @@ class I18n { static const String errorMessagePasswordTooShort = 'errorMessagePasswordTooShort'; static const String errorMessagePhoneIsEmpty = 'errorMessagePhoneIsEmpty'; + static const String errorMessageCodeIsEmpty = 'errorMessageCodeIsEmpty'; static const String contactsPermissionBlocked = 'contactsPermissionBlocked'; static const String openSettings = 'openSettings'; static const String errorMessagePhoneIsInvalid = 'errorMessagePhoneIsInvalid';