From 78be72372c685f28d3dd88e62cb07f9186cbcd80 Mon Sep 17 00:00:00 2001 From: mso7nueh Date: Mon, 14 Oct 2024 15:07:07 +0300 Subject: [PATCH] feature: consultant registration --- .../register_consultant_cubit.dart | 18 ++- .../register_consultant_state.dart | 1 + .../register_consultant_state.freezed.dart | 34 ++++- .../presentation/pages/last_step_screen.dart | 3 + .../stepper_become_consultant_screen.dart | 144 ++++++++++-------- .../profile/models/profile_model.dart | 1 + .../profile/models/profile_model.freezed.dart | 35 ++++- .../profile/models/profile_model.g.dart | 2 + .../bloc/settings_cubit/settings_cubit.dart | 1 + .../bloc/settings_cubit/settings_state.dart | 1 + .../settings_state.freezed.dart | 76 +++++---- .../presentation/pages/settings_screen.dart | 71 ++++----- 12 files changed, 244 insertions(+), 143 deletions(-) diff --git a/lib/features/consultant/become_consultant/presentation/bloc/register_consultant_cubit/register_consultant_cubit.dart b/lib/features/consultant/become_consultant/presentation/bloc/register_consultant_cubit/register_consultant_cubit.dart index 78a76708..be228de2 100644 --- a/lib/features/consultant/become_consultant/presentation/bloc/register_consultant_cubit/register_consultant_cubit.dart +++ b/lib/features/consultant/become_consultant/presentation/bloc/register_consultant_cubit/register_consultant_cubit.dart @@ -16,18 +16,28 @@ class RegisterConsultantCubit extends Cubit { socialLinks: SocialLinksModel(), hasMedicalEducation: true, ), + acceptOffer: false, ), ); - updateConsultantProfileModel(ConsultantProfileModel consultant) { - emit(RegisterConsultantState(consultant: consultant)); + updateConsultantProfileModel(ConsultantProfileModel consultant, [bool acceptOffer = false]) { + emit(RegisterConsultantState(consultant: consultant, acceptOffer: acceptOffer)); } registerConsultant() async { + if (state.consultant.photos != null) { + updateConsultantProfileModel( + state.consultant.copyWith( + photos: await uploadPhotos( + state.consultant.photos!.map((e) => File(e)).toList(), + ), + ), + ); + } await consultantRepository.registerConsultant(consultant: state.consultant); } - uploadPhotos(List files) async { - await consultantRepository.uploadPhotos(files: files); + Future> uploadPhotos(List files) async { + return await consultantRepository.uploadPhotos(files: files); } } diff --git a/lib/features/consultant/become_consultant/presentation/bloc/register_consultant_cubit/register_consultant_state.dart b/lib/features/consultant/become_consultant/presentation/bloc/register_consultant_cubit/register_consultant_state.dart index cb8cafe6..5f318efe 100644 --- a/lib/features/consultant/become_consultant/presentation/bloc/register_consultant_cubit/register_consultant_state.dart +++ b/lib/features/consultant/become_consultant/presentation/bloc/register_consultant_cubit/register_consultant_state.dart @@ -7,5 +7,6 @@ part 'register_consultant_state.freezed.dart'; abstract class RegisterConsultantState with _$RegisterConsultantState { const factory RegisterConsultantState({ required ConsultantProfileModel consultant, + required bool acceptOffer, }) = _RegisterConsultantState; } diff --git a/lib/features/consultant/become_consultant/presentation/bloc/register_consultant_cubit/register_consultant_state.freezed.dart b/lib/features/consultant/become_consultant/presentation/bloc/register_consultant_cubit/register_consultant_state.freezed.dart index f516e7bf..1bd087fe 100644 --- a/lib/features/consultant/become_consultant/presentation/bloc/register_consultant_cubit/register_consultant_state.freezed.dart +++ b/lib/features/consultant/become_consultant/presentation/bloc/register_consultant_cubit/register_consultant_state.freezed.dart @@ -17,6 +17,7 @@ final _privateConstructorUsedError = UnsupportedError( /// @nodoc mixin _$RegisterConsultantState { ConsultantProfileModel get consultant => throw _privateConstructorUsedError; + bool get acceptOffer => throw _privateConstructorUsedError; /// Create a copy of RegisterConsultantState /// with the given fields replaced by the non-null parameter values. @@ -31,7 +32,7 @@ abstract class $RegisterConsultantStateCopyWith<$Res> { $Res Function(RegisterConsultantState) then) = _$RegisterConsultantStateCopyWithImpl<$Res, RegisterConsultantState>; @useResult - $Res call({ConsultantProfileModel consultant}); + $Res call({ConsultantProfileModel consultant, bool acceptOffer}); $ConsultantProfileModelCopyWith<$Res> get consultant; } @@ -53,12 +54,17 @@ class _$RegisterConsultantStateCopyWithImpl<$Res, @override $Res call({ Object? consultant = null, + Object? acceptOffer = null, }) { return _then(_value.copyWith( consultant: null == consultant ? _value.consultant : consultant // ignore: cast_nullable_to_non_nullable as ConsultantProfileModel, + acceptOffer: null == acceptOffer + ? _value.acceptOffer + : acceptOffer // ignore: cast_nullable_to_non_nullable + as bool, ) as $Val); } @@ -82,7 +88,7 @@ abstract class _$$RegisterConsultantStateImplCopyWith<$Res> __$$RegisterConsultantStateImplCopyWithImpl<$Res>; @override @useResult - $Res call({ConsultantProfileModel consultant}); + $Res call({ConsultantProfileModel consultant, bool acceptOffer}); @override $ConsultantProfileModelCopyWith<$Res> get consultant; @@ -104,12 +110,17 @@ class __$$RegisterConsultantStateImplCopyWithImpl<$Res> @override $Res call({ Object? consultant = null, + Object? acceptOffer = null, }) { return _then(_$RegisterConsultantStateImpl( consultant: null == consultant ? _value.consultant : consultant // ignore: cast_nullable_to_non_nullable as ConsultantProfileModel, + acceptOffer: null == acceptOffer + ? _value.acceptOffer + : acceptOffer // ignore: cast_nullable_to_non_nullable + as bool, )); } } @@ -117,14 +128,17 @@ class __$$RegisterConsultantStateImplCopyWithImpl<$Res> /// @nodoc class _$RegisterConsultantStateImpl implements _RegisterConsultantState { - const _$RegisterConsultantStateImpl({required this.consultant}); + const _$RegisterConsultantStateImpl( + {required this.consultant, required this.acceptOffer}); @override final ConsultantProfileModel consultant; + @override + final bool acceptOffer; @override String toString() { - return 'RegisterConsultantState(consultant: $consultant)'; + return 'RegisterConsultantState(consultant: $consultant, acceptOffer: $acceptOffer)'; } @override @@ -133,11 +147,13 @@ class _$RegisterConsultantStateImpl implements _RegisterConsultantState { (other.runtimeType == runtimeType && other is _$RegisterConsultantStateImpl && (identical(other.consultant, consultant) || - other.consultant == consultant)); + other.consultant == consultant) && + (identical(other.acceptOffer, acceptOffer) || + other.acceptOffer == acceptOffer)); } @override - int get hashCode => Object.hash(runtimeType, consultant); + int get hashCode => Object.hash(runtimeType, consultant, acceptOffer); /// Create a copy of RegisterConsultantState /// with the given fields replaced by the non-null parameter values. @@ -151,11 +167,13 @@ class _$RegisterConsultantStateImpl implements _RegisterConsultantState { abstract class _RegisterConsultantState implements RegisterConsultantState { const factory _RegisterConsultantState( - {required final ConsultantProfileModel consultant}) = - _$RegisterConsultantStateImpl; + {required final ConsultantProfileModel consultant, + required final bool acceptOffer}) = _$RegisterConsultantStateImpl; @override ConsultantProfileModel get consultant; + @override + bool get acceptOffer; /// Create a copy of RegisterConsultantState /// with the given fields replaced by the non-null parameter values. diff --git a/lib/features/consultant/become_consultant/presentation/pages/last_step_screen.dart b/lib/features/consultant/become_consultant/presentation/pages/last_step_screen.dart index 89e3e2d4..d24f205a 100644 --- a/lib/features/consultant/become_consultant/presentation/pages/last_step_screen.dart +++ b/lib/features/consultant/become_consultant/presentation/pages/last_step_screen.dart @@ -1,6 +1,8 @@ import 'package:eatvio_app/core/const.dart'; +import 'package:eatvio_app/features/consultant/become_consultant/presentation/bloc/register_consultant_cubit/register_consultant_cubit.dart'; import 'package:eatvio_app/theme/theme_helper.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:url_launcher/url_launcher.dart'; class LastStepScreen extends StatefulWidget { @@ -46,6 +48,7 @@ class _LastStepScreenState extends State { setState(() { checkboxState = !checkboxState; }); + context.read().updateConsultantProfileModel(context.read().state.consultant, checkboxState); }, activeColor: appTheme.blueA400, contentPadding: const EdgeInsets.symmetric(horizontal: 16), diff --git a/lib/features/consultant/become_consultant/presentation/pages/stepper_become_consultant_screen.dart b/lib/features/consultant/become_consultant/presentation/pages/stepper_become_consultant_screen.dart index 57c11b07..7bc05885 100644 --- a/lib/features/consultant/become_consultant/presentation/pages/stepper_become_consultant_screen.dart +++ b/lib/features/consultant/become_consultant/presentation/pages/stepper_become_consultant_screen.dart @@ -76,77 +76,95 @@ class _StepperBecomeConsultantScreenState extends State Container( - padding: EdgeInsets.all(16), - width: MediaQuery.of(context).size.width, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - 'Спасибо!\nВаши данные отправлены на модерацию', - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 20, - height: 1, - fontWeight: FontWeight.w600, - ), - ), - const SizedBox(height: 16), - Container( - padding: const EdgeInsets.all(16), - decoration: BoxDecoration( - color: appTheme.blueA400, - shape: BoxShape.circle, - ), - child: Icon( - size: 32, - Icons.done, - color: Colors.white, - ), - ), - const SizedBox(height: 16), - Text( - 'В течении трех рабочих дней Вам придет уведомление о смене статуса', - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 16, - height: 1, - fontWeight: FontWeight.w500, - ), - ), - const SizedBox(height: 16), - InkWell( - onTap: () { - Navigator.of(context).pop(); - }, - child: Ink( - width: MediaQuery.of(context).size.width - 32, - height: 52, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(20), - color: appTheme.blueA400, + if (registrationConsultantCubit.state.acceptOffer) { + await registrationConsultantCubit.registerConsultant(); + await showModalBottomSheet( + useRootNavigator: true, + showDragHandle: true, + context: context, + builder: (context) => Container( + padding: EdgeInsets.all(16), + width: MediaQuery.of(context).size.width, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'Спасибо!\nВаши данные отправлены на модерацию', + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 20, + height: 1, + fontWeight: FontWeight.w600, ), - child: Center( - child: Text( - 'Закрыть', - style: TextStyle( - color: Colors.white, - fontSize: 18, - fontWeight: FontWeight.w600, + ), + const SizedBox(height: 16), + Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: appTheme.blueA400, + shape: BoxShape.circle, + ), + child: Icon( + size: 32, + Icons.done, + color: Colors.white, + ), + ), + const SizedBox(height: 16), + Text( + 'В течении трех рабочих дней Вам придет уведомление о смене статуса', + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16, + height: 1, + fontWeight: FontWeight.w500, + ), + ), + const SizedBox(height: 16), + InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Ink( + width: MediaQuery.of(context).size.width - 32, + height: 52, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + color: appTheme.blueA400, + ), + child: Center( + child: Text( + 'Закрыть', + style: TextStyle( + color: Colors.white, + fontSize: 18, + fontWeight: FontWeight.w600, + ), ), ), ), ), + ], + ), + ), + ); + } else { + showDialog( + context: context, + builder: (context) => AlertDialog( + actionsPadding: const EdgeInsets.symmetric(horizontal: 4), + content: Text('Примите договор публичной офёрты'), + actions: [ + TextButton( + child: const Text('Ок'), + onPressed: () { + Navigator.of(context).pop(); + }, ), ], ), - ), - ); + ); + } } else { setState(() { pageController.nextPage( diff --git a/lib/features/profile/models/profile_model.dart b/lib/features/profile/models/profile_model.dart index d209e6d7..12580fea 100644 --- a/lib/features/profile/models/profile_model.dart +++ b/lib/features/profile/models/profile_model.dart @@ -16,6 +16,7 @@ class ProfileModel with _$ProfileModel { @JsonKey(name: "is_public_profile") required bool isPublicProfile, @JsonKey(name: "slug") required String slug, @JsonKey(name: "profile_photo_url") required String profilePhotoUrl, + required String role, }) = _ProfileModel; factory ProfileModel.fromJson(Map json) => _$ProfileModelFromJson(json); diff --git a/lib/features/profile/models/profile_model.freezed.dart b/lib/features/profile/models/profile_model.freezed.dart index 94b860a3..844e51af 100644 --- a/lib/features/profile/models/profile_model.freezed.dart +++ b/lib/features/profile/models/profile_model.freezed.dart @@ -38,6 +38,7 @@ mixin _$ProfileModel { String get slug => throw _privateConstructorUsedError; @JsonKey(name: "profile_photo_url") String get profilePhotoUrl => throw _privateConstructorUsedError; + String get role => throw _privateConstructorUsedError; /// Serializes this ProfileModel to a JSON map. Map toJson() => throw _privateConstructorUsedError; @@ -64,7 +65,8 @@ abstract class $ProfileModelCopyWith<$Res> { @JsonKey(name: "updated_at") DateTime? updatedAt, @JsonKey(name: "is_public_profile") bool isPublicProfile, @JsonKey(name: "slug") String slug, - @JsonKey(name: "profile_photo_url") String profilePhotoUrl}); + @JsonKey(name: "profile_photo_url") String profilePhotoUrl, + String role}); } /// @nodoc @@ -91,6 +93,7 @@ class _$ProfileModelCopyWithImpl<$Res, $Val extends ProfileModel> Object? isPublicProfile = null, Object? slug = null, Object? profilePhotoUrl = null, + Object? role = null, }) { return _then(_value.copyWith( id: null == id @@ -129,6 +132,10 @@ class _$ProfileModelCopyWithImpl<$Res, $Val extends ProfileModel> ? _value.profilePhotoUrl : profilePhotoUrl // ignore: cast_nullable_to_non_nullable as String, + role: null == role + ? _value.role + : role // ignore: cast_nullable_to_non_nullable + as String, ) as $Val); } } @@ -150,7 +157,8 @@ abstract class _$$ProfileModelImplCopyWith<$Res> @JsonKey(name: "updated_at") DateTime? updatedAt, @JsonKey(name: "is_public_profile") bool isPublicProfile, @JsonKey(name: "slug") String slug, - @JsonKey(name: "profile_photo_url") String profilePhotoUrl}); + @JsonKey(name: "profile_photo_url") String profilePhotoUrl, + String role}); } /// @nodoc @@ -175,6 +183,7 @@ class __$$ProfileModelImplCopyWithImpl<$Res> Object? isPublicProfile = null, Object? slug = null, Object? profilePhotoUrl = null, + Object? role = null, }) { return _then(_$ProfileModelImpl( id: null == id @@ -213,6 +222,10 @@ class __$$ProfileModelImplCopyWithImpl<$Res> ? _value.profilePhotoUrl : profilePhotoUrl // ignore: cast_nullable_to_non_nullable as String, + role: null == role + ? _value.role + : role // ignore: cast_nullable_to_non_nullable + as String, )); } } @@ -229,7 +242,8 @@ class _$ProfileModelImpl implements _ProfileModel { @JsonKey(name: "updated_at") this.updatedAt, @JsonKey(name: "is_public_profile") required this.isPublicProfile, @JsonKey(name: "slug") required this.slug, - @JsonKey(name: "profile_photo_url") required this.profilePhotoUrl}); + @JsonKey(name: "profile_photo_url") required this.profilePhotoUrl, + required this.role}); factory _$ProfileModelImpl.fromJson(Map json) => _$$ProfileModelImplFromJson(json); @@ -261,10 +275,12 @@ class _$ProfileModelImpl implements _ProfileModel { @override @JsonKey(name: "profile_photo_url") final String profilePhotoUrl; + @override + final String role; @override String toString() { - return 'ProfileModel(id: $id, name: $name, email: $email, emailVerifiedAt: $emailVerifiedAt, createdAt: $createdAt, updatedAt: $updatedAt, isPublicProfile: $isPublicProfile, slug: $slug, profilePhotoUrl: $profilePhotoUrl)'; + return 'ProfileModel(id: $id, name: $name, email: $email, emailVerifiedAt: $emailVerifiedAt, createdAt: $createdAt, updatedAt: $updatedAt, isPublicProfile: $isPublicProfile, slug: $slug, profilePhotoUrl: $profilePhotoUrl, role: $role)'; } @override @@ -285,13 +301,14 @@ class _$ProfileModelImpl implements _ProfileModel { other.isPublicProfile == isPublicProfile) && (identical(other.slug, slug) || other.slug == slug) && (identical(other.profilePhotoUrl, profilePhotoUrl) || - other.profilePhotoUrl == profilePhotoUrl)); + other.profilePhotoUrl == profilePhotoUrl) && + (identical(other.role, role) || other.role == role)); } @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, id, name, email, emailVerifiedAt, - createdAt, updatedAt, isPublicProfile, slug, profilePhotoUrl); + createdAt, updatedAt, isPublicProfile, slug, profilePhotoUrl, role); /// Create a copy of ProfileModel /// with the given fields replaced by the non-null parameter values. @@ -319,8 +336,8 @@ abstract class _ProfileModel implements ProfileModel { @JsonKey(name: "updated_at") final DateTime? updatedAt, @JsonKey(name: "is_public_profile") required final bool isPublicProfile, @JsonKey(name: "slug") required final String slug, - @JsonKey(name: "profile_photo_url") - required final String profilePhotoUrl}) = _$ProfileModelImpl; + @JsonKey(name: "profile_photo_url") required final String profilePhotoUrl, + required final String role}) = _$ProfileModelImpl; factory _ProfileModel.fromJson(Map json) = _$ProfileModelImpl.fromJson; @@ -352,6 +369,8 @@ abstract class _ProfileModel implements ProfileModel { @override @JsonKey(name: "profile_photo_url") String get profilePhotoUrl; + @override + String get role; /// Create a copy of ProfileModel /// with the given fields replaced by the non-null parameter values. diff --git a/lib/features/profile/models/profile_model.g.dart b/lib/features/profile/models/profile_model.g.dart index 28e10ccf..7a0c1876 100644 --- a/lib/features/profile/models/profile_model.g.dart +++ b/lib/features/profile/models/profile_model.g.dart @@ -23,6 +23,7 @@ _$ProfileModelImpl _$$ProfileModelImplFromJson(Map json) => isPublicProfile: json['is_public_profile'] as bool, slug: json['slug'] as String, profilePhotoUrl: json['profile_photo_url'] as String, + role: json['role'] as String, ); Map _$$ProfileModelImplToJson(_$ProfileModelImpl instance) => @@ -36,6 +37,7 @@ Map _$$ProfileModelImplToJson(_$ProfileModelImpl instance) => 'is_public_profile': instance.isPublicProfile, 'slug': instance.slug, 'profile_photo_url': instance.profilePhotoUrl, + 'role': instance.role, }; _$ProfileDetailsModelImpl _$$ProfileDetailsModelImplFromJson( diff --git a/lib/features/settings/presentation/bloc/settings_cubit/settings_cubit.dart b/lib/features/settings/presentation/bloc/settings_cubit/settings_cubit.dart index ce448c88..488524e8 100644 --- a/lib/features/settings/presentation/bloc/settings_cubit/settings_cubit.dart +++ b/lib/features/settings/presentation/bloc/settings_cubit/settings_cubit.dart @@ -19,6 +19,7 @@ class SettingsCubit extends Cubit { emit(SettingsState.loaded( profileSettings: await settingsRepository.getProfileSettings(), profileDetails: await profileRepository.getMyProfileDetails(), + profile: await profileRepository.getMyProfile(), )); } catch (e) { emit(SettingsState.error(errorMessage: e.toString())); diff --git a/lib/features/settings/presentation/bloc/settings_cubit/settings_state.dart b/lib/features/settings/presentation/bloc/settings_cubit/settings_state.dart index 41977b39..34922051 100644 --- a/lib/features/settings/presentation/bloc/settings_cubit/settings_state.dart +++ b/lib/features/settings/presentation/bloc/settings_cubit/settings_state.dart @@ -13,6 +13,7 @@ abstract class SettingsState with _$SettingsState { const factory SettingsState.loaded({ required ProfileSettingsModel profileSettings, required ProfileDetailsModel profileDetails, + required ProfileModel profile, }) = SettingsStateLoaded; const factory SettingsState.error({ diff --git a/lib/features/settings/presentation/bloc/settings_cubit/settings_state.freezed.dart b/lib/features/settings/presentation/bloc/settings_cubit/settings_state.freezed.dart index f19981b6..a812e217 100644 --- a/lib/features/settings/presentation/bloc/settings_cubit/settings_state.freezed.dart +++ b/lib/features/settings/presentation/bloc/settings_cubit/settings_state.freezed.dart @@ -21,7 +21,7 @@ mixin _$SettingsState { TResult Function() $default, { required TResult Function() loading, required TResult Function(ProfileSettingsModel profileSettings, - ProfileDetailsModel profileDetails) + ProfileDetailsModel profileDetails, ProfileModel profile) loaded, required TResult Function(String errorMessage) error, }) => @@ -31,7 +31,7 @@ mixin _$SettingsState { TResult? Function()? $default, { TResult? Function()? loading, TResult? Function(ProfileSettingsModel profileSettings, - ProfileDetailsModel profileDetails)? + ProfileDetailsModel profileDetails, ProfileModel profile)? loaded, TResult? Function(String errorMessage)? error, }) => @@ -41,7 +41,7 @@ mixin _$SettingsState { TResult Function()? $default, { TResult Function()? loading, TResult Function(ProfileSettingsModel profileSettings, - ProfileDetailsModel profileDetails)? + ProfileDetailsModel profileDetails, ProfileModel profile)? loaded, TResult Function(String errorMessage)? error, required TResult orElse(), @@ -139,7 +139,7 @@ class _$SettingsStateImpl implements _SettingsState { TResult Function() $default, { required TResult Function() loading, required TResult Function(ProfileSettingsModel profileSettings, - ProfileDetailsModel profileDetails) + ProfileDetailsModel profileDetails, ProfileModel profile) loaded, required TResult Function(String errorMessage) error, }) { @@ -152,7 +152,7 @@ class _$SettingsStateImpl implements _SettingsState { TResult? Function()? $default, { TResult? Function()? loading, TResult? Function(ProfileSettingsModel profileSettings, - ProfileDetailsModel profileDetails)? + ProfileDetailsModel profileDetails, ProfileModel profile)? loaded, TResult? Function(String errorMessage)? error, }) { @@ -165,7 +165,7 @@ class _$SettingsStateImpl implements _SettingsState { TResult Function()? $default, { TResult Function()? loading, TResult Function(ProfileSettingsModel profileSettings, - ProfileDetailsModel profileDetails)? + ProfileDetailsModel profileDetails, ProfileModel profile)? loaded, TResult Function(String errorMessage)? error, required TResult orElse(), @@ -263,7 +263,7 @@ class _$SettingsStateLoadingImpl implements SettingsStateLoading { TResult Function() $default, { required TResult Function() loading, required TResult Function(ProfileSettingsModel profileSettings, - ProfileDetailsModel profileDetails) + ProfileDetailsModel profileDetails, ProfileModel profile) loaded, required TResult Function(String errorMessage) error, }) { @@ -276,7 +276,7 @@ class _$SettingsStateLoadingImpl implements SettingsStateLoading { TResult? Function()? $default, { TResult? Function()? loading, TResult? Function(ProfileSettingsModel profileSettings, - ProfileDetailsModel profileDetails)? + ProfileDetailsModel profileDetails, ProfileModel profile)? loaded, TResult? Function(String errorMessage)? error, }) { @@ -289,7 +289,7 @@ class _$SettingsStateLoadingImpl implements SettingsStateLoading { TResult Function()? $default, { TResult Function()? loading, TResult Function(ProfileSettingsModel profileSettings, - ProfileDetailsModel profileDetails)? + ProfileDetailsModel profileDetails, ProfileModel profile)? loaded, TResult Function(String errorMessage)? error, required TResult orElse(), @@ -350,10 +350,12 @@ abstract class _$$SettingsStateLoadedImplCopyWith<$Res> { @useResult $Res call( {ProfileSettingsModel profileSettings, - ProfileDetailsModel profileDetails}); + ProfileDetailsModel profileDetails, + ProfileModel profile}); $ProfileSettingsModelCopyWith<$Res> get profileSettings; $ProfileDetailsModelCopyWith<$Res> get profileDetails; + $ProfileModelCopyWith<$Res> get profile; } /// @nodoc @@ -371,6 +373,7 @@ class __$$SettingsStateLoadedImplCopyWithImpl<$Res> $Res call({ Object? profileSettings = null, Object? profileDetails = null, + Object? profile = null, }) { return _then(_$SettingsStateLoadedImpl( profileSettings: null == profileSettings @@ -381,6 +384,10 @@ class __$$SettingsStateLoadedImplCopyWithImpl<$Res> ? _value.profileDetails : profileDetails // ignore: cast_nullable_to_non_nullable as ProfileDetailsModel, + profile: null == profile + ? _value.profile + : profile // ignore: cast_nullable_to_non_nullable + as ProfileModel, )); } @@ -403,22 +410,36 @@ class __$$SettingsStateLoadedImplCopyWithImpl<$Res> return _then(_value.copyWith(profileDetails: value)); }); } + + /// Create a copy of SettingsState + /// with the given fields replaced by the non-null parameter values. + @override + @pragma('vm:prefer-inline') + $ProfileModelCopyWith<$Res> get profile { + return $ProfileModelCopyWith<$Res>(_value.profile, (value) { + return _then(_value.copyWith(profile: value)); + }); + } } /// @nodoc class _$SettingsStateLoadedImpl implements SettingsStateLoaded { const _$SettingsStateLoadedImpl( - {required this.profileSettings, required this.profileDetails}); + {required this.profileSettings, + required this.profileDetails, + required this.profile}); @override final ProfileSettingsModel profileSettings; @override final ProfileDetailsModel profileDetails; + @override + final ProfileModel profile; @override String toString() { - return 'SettingsState.loaded(profileSettings: $profileSettings, profileDetails: $profileDetails)'; + return 'SettingsState.loaded(profileSettings: $profileSettings, profileDetails: $profileDetails, profile: $profile)'; } @override @@ -429,11 +450,13 @@ class _$SettingsStateLoadedImpl implements SettingsStateLoaded { (identical(other.profileSettings, profileSettings) || other.profileSettings == profileSettings) && (identical(other.profileDetails, profileDetails) || - other.profileDetails == profileDetails)); + other.profileDetails == profileDetails) && + (identical(other.profile, profile) || other.profile == profile)); } @override - int get hashCode => Object.hash(runtimeType, profileSettings, profileDetails); + int get hashCode => + Object.hash(runtimeType, profileSettings, profileDetails, profile); /// Create a copy of SettingsState /// with the given fields replaced by the non-null parameter values. @@ -450,11 +473,11 @@ class _$SettingsStateLoadedImpl implements SettingsStateLoaded { TResult Function() $default, { required TResult Function() loading, required TResult Function(ProfileSettingsModel profileSettings, - ProfileDetailsModel profileDetails) + ProfileDetailsModel profileDetails, ProfileModel profile) loaded, required TResult Function(String errorMessage) error, }) { - return loaded(profileSettings, profileDetails); + return loaded(profileSettings, profileDetails, profile); } @override @@ -463,11 +486,11 @@ class _$SettingsStateLoadedImpl implements SettingsStateLoaded { TResult? Function()? $default, { TResult? Function()? loading, TResult? Function(ProfileSettingsModel profileSettings, - ProfileDetailsModel profileDetails)? + ProfileDetailsModel profileDetails, ProfileModel profile)? loaded, TResult? Function(String errorMessage)? error, }) { - return loaded?.call(profileSettings, profileDetails); + return loaded?.call(profileSettings, profileDetails, profile); } @override @@ -476,13 +499,13 @@ class _$SettingsStateLoadedImpl implements SettingsStateLoaded { TResult Function()? $default, { TResult Function()? loading, TResult Function(ProfileSettingsModel profileSettings, - ProfileDetailsModel profileDetails)? + ProfileDetailsModel profileDetails, ProfileModel profile)? loaded, TResult Function(String errorMessage)? error, required TResult orElse(), }) { if (loaded != null) { - return loaded(profileSettings, profileDetails); + return loaded(profileSettings, profileDetails, profile); } return orElse(); } @@ -527,12 +550,13 @@ class _$SettingsStateLoadedImpl implements SettingsStateLoaded { abstract class SettingsStateLoaded implements SettingsState { const factory SettingsStateLoaded( - {required final ProfileSettingsModel profileSettings, - required final ProfileDetailsModel profileDetails}) = - _$SettingsStateLoadedImpl; + {required final ProfileSettingsModel profileSettings, + required final ProfileDetailsModel profileDetails, + required final ProfileModel profile}) = _$SettingsStateLoadedImpl; ProfileSettingsModel get profileSettings; ProfileDetailsModel get profileDetails; + ProfileModel get profile; /// Create a copy of SettingsState /// with the given fields replaced by the non-null parameter values. @@ -614,7 +638,7 @@ class _$SettingsStateErrorImpl implements SettingsStateError { TResult Function() $default, { required TResult Function() loading, required TResult Function(ProfileSettingsModel profileSettings, - ProfileDetailsModel profileDetails) + ProfileDetailsModel profileDetails, ProfileModel profile) loaded, required TResult Function(String errorMessage) error, }) { @@ -627,7 +651,7 @@ class _$SettingsStateErrorImpl implements SettingsStateError { TResult? Function()? $default, { TResult? Function()? loading, TResult? Function(ProfileSettingsModel profileSettings, - ProfileDetailsModel profileDetails)? + ProfileDetailsModel profileDetails, ProfileModel profile)? loaded, TResult? Function(String errorMessage)? error, }) { @@ -640,7 +664,7 @@ class _$SettingsStateErrorImpl implements SettingsStateError { TResult Function()? $default, { TResult Function()? loading, TResult Function(ProfileSettingsModel profileSettings, - ProfileDetailsModel profileDetails)? + ProfileDetailsModel profileDetails, ProfileModel profile)? loaded, TResult Function(String errorMessage)? error, required TResult orElse(), diff --git a/lib/features/settings/presentation/pages/settings_screen.dart b/lib/features/settings/presentation/pages/settings_screen.dart index c0a8901b..e47a90fc 100644 --- a/lib/features/settings/presentation/pages/settings_screen.dart +++ b/lib/features/settings/presentation/pages/settings_screen.dart @@ -56,8 +56,11 @@ class _SettingsScreenState extends State { const SizedBox(height: 12), _aboutEatvio(state), const SizedBox(height: 12), - _becomeConsultantButton(state), - const SizedBox(height: 8), + if (state.profile.role != 'consultant') + Padding( + padding: const EdgeInsets.only(bottom: 8), + child: _becomeConsultantButton(state), + ), _deleteAccountButton(state), ], ), @@ -213,10 +216,10 @@ class _SettingsScreenState extends State { updatesNotificationsSwitchState = !updatesNotificationsSwitchState; }); settingsCubit.updateProfileSettings( - profileSettingsModel: state.profileSettings.copyWith( - newUpdatesNotifications: updatesNotificationsSwitchState, - ), - ); + profileSettingsModel: state.profileSettings.copyWith( + newUpdatesNotifications: updatesNotificationsSwitchState, + ), + ); }, title: 'Уведомление о новых обновлениях', trailing: CupertinoSwitch( @@ -227,10 +230,10 @@ class _SettingsScreenState extends State { updatesNotificationsSwitchState = newValue; }); settingsCubit.updateProfileSettings( - profileSettingsModel: state.profileSettings.copyWith( - newUpdatesNotifications: updatesNotificationsSwitchState, - ), - ); + profileSettingsModel: state.profileSettings.copyWith( + newUpdatesNotifications: updatesNotificationsSwitchState, + ), + ); }, ), ), @@ -242,10 +245,10 @@ class _SettingsScreenState extends State { fillDiaryNotificationsSwitchState = !fillDiaryNotificationsSwitchState; }); settingsCubit.updateProfileSettings( - profileSettingsModel: state.profileSettings.copyWith( - diaryReminderNotifications: fillDiaryNotificationsSwitchState, - ), - ); + profileSettingsModel: state.profileSettings.copyWith( + diaryReminderNotifications: fillDiaryNotificationsSwitchState, + ), + ); }, title: 'Напоминание о заполнении дневника', trailing: CupertinoSwitch( @@ -256,10 +259,10 @@ class _SettingsScreenState extends State { fillDiaryNotificationsSwitchState = newValue; }); settingsCubit.updateProfileSettings( - profileSettingsModel: state.profileSettings.copyWith( - diaryReminderNotifications: fillDiaryNotificationsSwitchState, - ), - ); + profileSettingsModel: state.profileSettings.copyWith( + diaryReminderNotifications: fillDiaryNotificationsSwitchState, + ), + ); }, ), ), @@ -271,10 +274,10 @@ class _SettingsScreenState extends State { moodSwitchState = !moodSwitchState; }); settingsCubit.updateProfileSettings( - profileSettingsModel: state.profileSettings.copyWith( - isMoodFillable: moodSwitchState, - ), - ); + profileSettingsModel: state.profileSettings.copyWith( + isMoodFillable: moodSwitchState, + ), + ); }, title: 'Указывать “настроение” в заполнение дневника', trailing: CupertinoSwitch( @@ -285,10 +288,10 @@ class _SettingsScreenState extends State { moodSwitchState = newValue; }); settingsCubit.updateProfileSettings( - profileSettingsModel: state.profileSettings.copyWith( - isMoodFillable: moodSwitchState, - ), - ); + profileSettingsModel: state.profileSettings.copyWith( + isMoodFillable: moodSwitchState, + ), + ); }, ), ), @@ -300,10 +303,10 @@ class _SettingsScreenState extends State { bedTimeSwitchState = !bedTimeSwitchState; }); settingsCubit.updateProfileSettings( - profileSettingsModel: state.profileSettings.copyWith( - isBedtimeFillable: bedTimeSwitchState, - ), - ); + profileSettingsModel: state.profileSettings.copyWith( + isBedtimeFillable: bedTimeSwitchState, + ), + ); }, title: 'Указывать “отход ко сну” в заполнение дневника', trailing: CupertinoSwitch( @@ -314,10 +317,10 @@ class _SettingsScreenState extends State { bedTimeSwitchState = newValue; }); settingsCubit.updateProfileSettings( - profileSettingsModel: state.profileSettings.copyWith( - isBedtimeFillable: bedTimeSwitchState, - ), - ); + profileSettingsModel: state.profileSettings.copyWith( + isBedtimeFillable: bedTimeSwitchState, + ), + ); }, ), ),