6177214e-ce7c-49e3-99de-ff9721b26f63 — Commit dc5ac209
Changed files
.../pregistration/bloc/preregistration_cubit.dart | 31 +++++++++++++--------- .../pregistration/bloc/preregistration_state.dart | 17 +++++++++--- .../pages/prereg_confirmation_page.dart | 2 +- .../pregistration/pages/prereg_profile_page.dart | 12 ++++----- .../components/intl_phone_field.dart | 4 ++- .../cubit/profile_settings_cubit.dart | 11 +++++++- .../profile_settings/profile_settings_page.dart | 5 ++-- comwell_key_app/lib/utils/phone_utils.dart | 4 +++ 8 files changed, 58 insertions(+), 28 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 6fe41fa1..f9dbc680 100644
--- a/comwell_key_app/lib/pregistration/bloc/preregistration_cubit.dart
+++ b/comwell_key_app/lib/pregistration/bloc/preregistration_cubit.dart
@@ -10,6 +10,8 @@ import 'package:comwell_key_app/profile_settings/repostiory/profile_settings_rep
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:comwell_key_app/utils/phone_utils.dart';
+import 'package:country_code_picker/country_code_picker.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
@@ -29,6 +31,10 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
final lastNameTextController = TextEditingController();
final emailTextController = TextEditingController();
final phoneNumberTextController = TextEditingController();
+
+ CountryCode? countryCode;
+ String? phoneNumber;
+
String selectedCountry = '';
PreregistrationPage get currentPage =>
@@ -36,7 +42,7 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
bool _isAnimating = false;
PreregistrationCubit({required this.booking})
- : super(const PreregistrationState(loading: false)) {
+ : super(PreregistrationState(loading: false)) {
_tracking.trackScreenView(
"Pre-registration - Betalingskort",
"/pre-registration/betalingskort",
@@ -51,15 +57,16 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
postalCodeTextController.text = user.address.zipCode;
cityTextController.text = user.address.city;
selectedCountry = user.address.country;
- phoneNumberTextController.text = user.phoneNumber;
+
+ countryCode = getCountryCodeFromPhoneNumber(user.phoneNumber).$1;
+ phoneNumber = getCountryCodeFromPhoneNumber(user.phoneNumber).$2;
+
firstNameTextController.text = user.firstName;
lastNameTextController.text = user.lastName;
emailTextController.text = user.email;
- phoneNumberTextController.text = user.phoneNumber;
+ phoneNumberTextController.text = phoneNumber!;
-
-
emit(state.copyWith(loading: false, error: null, user: user));
} on Exception catch (e) {
emit(state.copyWith(error: e));
@@ -67,9 +74,7 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
}
void onAddressContinueClicked() {
-
if (isAddressValid && isCityValid) {
-
final updatedUser = state.user!.copyWith(
address: Address(
street: addressTextController.text,
@@ -86,11 +91,14 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
}
void onProfileContinueClicked() {
+ final phoneNumber = concatCountryCodeAndPhoneNumber(countryCode!, phoneNumberTextController.text);
+
final updatedUser = state.user!.copyWith(
firstName: firstNameTextController.text,
lastName: lastNameTextController.text,
- phoneNumber: phoneNumberTextController.text);
+ phoneNumber: phoneNumber);
emit(state.copyWith(user: updatedUser));
+
_navigateNextPage();
}
@@ -158,7 +166,7 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
// _tracking.trackBeginCheckout(analyticsEventItem);
final confirmationId = booking.confirmationId;
- print("confirmationId=$confirmationId");
+
await _profileSettingsRepository.updateUser(state.user!);
final response =
await _preregistrationRepository.createPreregistration(confirmationId);
@@ -234,7 +242,6 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
return super.close();
}
-
bool get isAddressValid => addressTextController.text.isNotEmpty;
bool get isPostalCodeValid => postalCodeTextController.text.isNotEmpty;
@@ -248,9 +255,7 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
case PreregistrationPage.profile:
return true;
case PreregistrationPage.address:
- return isAddressValid ||
- isPostalCodeValid ||
- isCityValid;
+ return isAddressValid || isPostalCodeValid || isCityValid;
case PreregistrationPage.payment:
return true;
case PreregistrationPage.confirmation:
diff --git a/comwell_key_app/lib/pregistration/bloc/preregistration_state.dart b/comwell_key_app/lib/pregistration/bloc/preregistration_state.dart
index f6088e0e..5d17409e 100644
--- a/comwell_key_app/lib/pregistration/bloc/preregistration_state.dart
+++ b/comwell_key_app/lib/pregistration/bloc/preregistration_state.dart
@@ -1,3 +1,5 @@
+import 'package:comwell_key_app/utils/phone_utils.dart';
+import 'package:country_code_picker/country_code_picker.dart';
import 'package:equatable/equatable.dart';
import '../../profile_settings/model/user.dart';
@@ -6,14 +8,16 @@ class PreregistrationState extends Equatable {
final bool forceUpdate;
final bool loading;
final User? user;
+ final CountryCode? countryCode;
+ final String? phoneNumber;
final Exception? error;
final bool missingInformation;
final int numOfExtras;
final int extrasTotalPrice;
final bool termsAndConditionsAccepted;
- const PreregistrationState({
- required this.loading,
+ PreregistrationState({
+ required this.loading,
this.missingInformation = false,
this.numOfExtras = 0,
this.extrasTotalPrice = 0,
@@ -21,6 +25,8 @@ class PreregistrationState extends Equatable {
this.forceUpdate = false,
this.user,
this.error,
+ this.phoneNumber,
+ this.countryCode,
});
@override
@@ -28,6 +34,8 @@ class PreregistrationState extends Equatable {
loading,
user,
error,
+ phoneNumber,
+ countryCode,
missingInformation,
numOfExtras,
extrasTotalPrice,
@@ -39,6 +47,7 @@ class PreregistrationState extends Equatable {
bool? loading,
User? user,
Exception? error,
+ String? phoneNumber,
bool? missingInformation,
int? numOfExtras,
int? extrasTotalPrice,
@@ -55,6 +64,8 @@ class PreregistrationState extends Equatable {
termsAndConditionsAccepted:
termsAndConditionsAccepted ?? this.termsAndConditionsAccepted,
extrasTotalPrice: extrasTotalPrice ?? this.extrasTotalPrice,
- error: error);
+ error: error,
+ phoneNumber: phoneNumber ?? this.phoneNumber,
+ countryCode: countryCode);
}
}
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 440f4808..4cddca8f 100644
--- a/comwell_key_app/lib/pregistration/pages/prereg_confirmation_page.dart
+++ b/comwell_key_app/lib/pregistration/pages/prereg_confirmation_page.dart
@@ -47,7 +47,7 @@ class PreregConfirmationPage extends StatelessWidget {
style: Theme.of(context).textTheme.bodyMedium,
),
Text(
- "${state.user!.address.country} ${state.user!.phoneNumber}",
+ state.user!.phoneNumber,
style: Theme.of(context).textTheme.bodyMedium,
),
],
diff --git a/comwell_key_app/lib/pregistration/pages/prereg_profile_page.dart b/comwell_key_app/lib/pregistration/pages/prereg_profile_page.dart
index 2c7fb8cd..fde6780c 100644
--- a/comwell_key_app/lib/pregistration/pages/prereg_profile_page.dart
+++ b/comwell_key_app/lib/pregistration/pages/prereg_profile_page.dart
@@ -5,6 +5,7 @@ import 'package:comwell_key_app/pregistration/bloc/preregistration_cubit.dart';
import 'package:comwell_key_app/pregistration/bloc/preregistration_state.dart';
import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:comwell_key_app/utils/phone_utils.dart';
+import 'package:country_code_picker/country_code_picker.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -36,10 +37,6 @@ class PreregProfilePage extends StatelessWidget {
Widget _buildProfilePage(
ThemeData theme, PreregistrationState state, BuildContext context) {
final cubit = context.read<PreregistrationCubit>();
- final (countryCode, phoneNumber) =
- getCountryCodeFromPhoneNumber(state.user!.phoneNumber);
-
- print("phoneNumber: $phoneNumber");
return ListView(children: [
Column(
@@ -75,10 +72,13 @@ class PreregProfilePage extends StatelessWidget {
const SizedBox(height: 8),
IntlPhoneField(
title: "profile_settings_phone".tr(),
- phoneNumber: phoneNumber,
- countryCode: countryCode,
+ phoneNumber: cubit.phoneNumber!,
+ countryCode: cubit.countryCode!,
controller: cubit.phoneNumberTextController,
readOnly: false,
+ onChanged: (CountryCode countryCode) {
+ cubit.countryCode = countryCode;
+ },
onSubmitted: (_) {},
),
],
diff --git a/comwell_key_app/lib/profile_settings/components/intl_phone_field.dart b/comwell_key_app/lib/profile_settings/components/intl_phone_field.dart
index 8f5ec5ad..b230ee5c 100644
--- a/comwell_key_app/lib/profile_settings/components/intl_phone_field.dart
+++ b/comwell_key_app/lib/profile_settings/components/intl_phone_field.dart
@@ -10,7 +10,7 @@ class IntlPhoneField extends StatefulWidget {
final TextEditingController controller;
final bool readOnly;
final void Function(String)? onSubmitted;
-
+ final void Function(CountryCode)? onChanged;
const IntlPhoneField({
required this.title,
required this.phoneNumber,
@@ -18,6 +18,7 @@ class IntlPhoneField extends StatefulWidget {
required this.controller,
this.readOnly = false,
this.onSubmitted,
+ this.onChanged,
super.key,
});
@@ -62,6 +63,7 @@ class IntlPhoneFieldState extends State<IntlPhoneField> {
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
CountryCodePicker(
+ onChanged: widget.onChanged,
initialSelection: widget.countryCode.toString(),
showFlag: false,
favorite: const [
diff --git a/comwell_key_app/lib/profile_settings/cubit/profile_settings_cubit.dart b/comwell_key_app/lib/profile_settings/cubit/profile_settings_cubit.dart
index 52a8f0c3..bee06b5f 100644
--- a/comwell_key_app/lib/profile_settings/cubit/profile_settings_cubit.dart
+++ b/comwell_key_app/lib/profile_settings/cubit/profile_settings_cubit.dart
@@ -6,6 +6,8 @@ import 'package:comwell_key_app/profile_settings/model/user.dart';
import 'package:comwell_key_app/profile_settings/repostiory/profile_settings_repository.dart';
import 'package:comwell_key_app/tracking/comwell_tracking.dart';
import 'package:comwell_key_app/utils/locator.dart';
+import 'package:comwell_key_app/utils/phone_utils.dart';
+import 'package:country_code_picker/country_code_picker.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
@@ -18,6 +20,8 @@ class ProfileSettingsCubit extends Cubit<ProfileSettingsState> {
final TextEditingController firstNameController = TextEditingController();
final TextEditingController lastNameController = TextEditingController();
final TextEditingController phoneNumberController = TextEditingController();
+ CountryCode? countryCode;
+ String? phoneNumber;
ProfileSettingsCubit(
{required this.profileRepository,
@@ -32,9 +36,14 @@ class ProfileSettingsCubit extends Cubit<ProfileSettingsState> {
emit(const ProfileSettingsState(isLoading: true, user: null, error: null));
try {
final user = await profileRepository.fetchProfileSettings();
+
+ countryCode = getCountryCodeFromPhoneNumber(user.phoneNumber).$1;
+ phoneNumber = getCountryCodeFromPhoneNumber(user.phoneNumber).$2;
+
firstNameController.text = user.firstName;
lastNameController.text = user.lastName;
- phoneNumberController.text = user.phoneNumber;
+ phoneNumberController.text = phoneNumber!;
+
emit(ProfileSettingsState(isLoading: false, user: user, error: null));
} catch (e) {
emit(ProfileSettingsState(isLoading: false, user: null, error: Error()));
diff --git a/comwell_key_app/lib/profile_settings/profile_settings_page.dart b/comwell_key_app/lib/profile_settings/profile_settings_page.dart
index 5ca2d351..a64326b9 100644
--- a/comwell_key_app/lib/profile_settings/profile_settings_page.dart
+++ b/comwell_key_app/lib/profile_settings/profile_settings_page.dart
@@ -57,7 +57,6 @@ class ProfileSettingsPage extends StatelessWidget {
Widget _buildProfileSettingsPage(
ThemeData theme, ProfileSettingsState state, BuildContext context) {
final cubit = context.read<ProfileSettingsCubit>();
- final (countryCode, phoneNumber) = getCountryCodeFromPhoneNumber(state.user!.phoneNumber);
return Scaffold(
resizeToAvoidBottomInset: false,
backgroundColor: Colors.white,
@@ -103,8 +102,8 @@ class ProfileSettingsPage extends StatelessWidget {
const SizedBox(height: 8),
IntlPhoneField(
title: "profile_settings_phone".tr(),
- phoneNumber: phoneNumber,
- countryCode: countryCode,
+ phoneNumber: cubit.phoneNumber!,
+ countryCode: cubit.countryCode!,
controller: cubit.phoneNumberController,
readOnly: false,
onSubmitted: (value) {
diff --git a/comwell_key_app/lib/utils/phone_utils.dart b/comwell_key_app/lib/utils/phone_utils.dart
index b365a998..eb007d2e 100644
--- a/comwell_key_app/lib/utils/phone_utils.dart
+++ b/comwell_key_app/lib/utils/phone_utils.dart
@@ -11,3 +11,7 @@ import 'package:country_code_picker/country_code_picker.dart';
print("cleanedPhoneNumber: $cleanedPhoneNumber");
return (countryCode, cleanedPhoneNumber);
}
+
+String concatCountryCodeAndPhoneNumber(CountryCode countryCode, String phoneNumber) {
+ return "${countryCode.dialCode}$phoneNumber";
+}