From bf6e23e96a6a4002bb9b4b5a285ace32d11a05a0 Mon Sep 17 00:00:00 2001 From: mso7nueh Date: Wed, 3 Sep 2025 11:34:41 +0300 Subject: [PATCH] feat(metrica): Issue-685 --- .../profile_avatar_cubit.dart | 47 +++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/lib/features/bottom_navigation_bar/presentation/bloc/profile_avatar_cubit/profile_avatar_cubit.dart b/lib/features/bottom_navigation_bar/presentation/bloc/profile_avatar_cubit/profile_avatar_cubit.dart index cc7939dd..935eecf7 100644 --- a/lib/features/bottom_navigation_bar/presentation/bloc/profile_avatar_cubit/profile_avatar_cubit.dart +++ b/lib/features/bottom_navigation_bar/presentation/bloc/profile_avatar_cubit/profile_avatar_cubit.dart @@ -1,24 +1,55 @@ +import 'package:appmetrica_plugin/appmetrica_plugin.dart'; import 'package:eatvio_app/core/app_router.dart'; import 'package:eatvio_app/features/bottom_navigation_bar/presentation/bloc/profile_avatar_cubit/profile_avatar_state.dart'; import 'package:eatvio_app/features/profile/repositories/profile_repository.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:go_router/go_router.dart'; +import 'package:permission_handler/permission_handler.dart'; class ProfileAvatarCubit extends Cubit { final ProfileRepository profileRepository; - ProfileAvatarCubit({ - required this.profileRepository, - }) : super(const ProfileAvatarState.loading()); + ProfileAvatarCubit({required this.profileRepository}) : super(const ProfileAvatarState.loading()); + + int _calculateAge(String birthdate) { + try { + final dateParts = birthdate.split('-'); + if (dateParts.length == 3) { + final birthYear = int.parse(dateParts[0]); + final birthMonth = int.parse(dateParts[1]); + final birthDay = int.parse(dateParts[2]); + + final now = DateTime.now(); + int age = now.year - birthYear; + + if (now.month < birthMonth || (now.month == birthMonth && now.day < birthDay)) { + age--; + } + + return age; + } + } catch (e) { + return 0; + } + return 0; + } Future getMyProfile() async { emit(const ProfileAvatarState.loading()); + final profile = await profileRepository.getMyProfile(); + final profileDetails = await profileRepository.getMyProfileDetails(); try { - emit( - ProfileAvatarState.loaded( - profile: await profileRepository.getMyProfile(), - ), - ); + emit(ProfileAvatarState.loaded(profile: profile)); + final notificationStatus = await Permission.notification.status; + final isNotificationEnabled = notificationStatus.isGranted; + AppMetricaUserProfile userProfile = AppMetricaUserProfile([ + AppMetricaNameAttribute.withValue(profile.name), + AppMetricaGenderAttribute.withValue(profileDetails.gender == 'male' ? AppMetricaGender.male : AppMetricaGender.female), + AppMetricaBirthDateAttribute.withAge(_calculateAge(profileDetails.birthdate)), + AppMetricaNotificationEnabledAttribute.withValue(isNotificationEnabled), + ]); + AppMetrica.setUserProfileID(profile.slug); + AppMetrica.reportUserProfile(userProfile); } catch (e) { AppRouter.navigatorKey.currentContext?.go('/auth-screen'); emit(ProfileAvatarState.error(errorMessage: e.toString()));