diff --git a/assets/icons/consultant_rating_icon.svg b/assets/icons/consultant_rating_icon.svg
new file mode 100644
index 00000000..493b4d95
--- /dev/null
+++ b/assets/icons/consultant_rating_icon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/lib/core/di/cubit_registrations.dart b/lib/core/di/cubit_registrations.dart
index babff4f6..ec2de9ce 100644
--- a/lib/core/di/cubit_registrations.dart
+++ b/lib/core/di/cubit_registrations.dart
@@ -135,7 +135,7 @@ class CubitRegistrations {
sl.registerFactory(() => UserPurchasesCubit(consultationsRepository: sl()));
sl.registerFactory(() => BlockedUsersCubit(blockedUsersRepository: sl()));
sl.registerFactory(() => NotificationSettingsCubit(notificationSettingsRepository: sl()));
- sl.registerFactory(() => ConsultantRatingCubit(sl()));
+ sl.registerFactory(() => ConsultantRatingCubit(feedRepository: sl(), repository: sl(), profileRepository: sl()));
sl.registerFactory(() => ViewsCubit(viewsRepository: sl()));
sl.registerFactory(() => UserDetailsCubit(profileRepository: sl()));
}
diff --git a/lib/features/consultant_rating/models/statistics_model.dart b/lib/features/consultant_rating/models/statistics_model.dart
index bbac675b..1e04eebc 100644
--- a/lib/features/consultant_rating/models/statistics_model.dart
+++ b/lib/features/consultant_rating/models/statistics_model.dart
@@ -13,6 +13,7 @@ abstract class StatisticsModel with _$StatisticsModel {
@JsonKey(name: 'count_diets') int? dietsCount,
@JsonKey(name: 'count_consultants') int? consultationsCount,
@JsonKey(name: 'count_products_nutritional_values') int? qwe,
+ @JsonKey(name: 'referral_link') String? refLink,
}) = _StatisticsModel;
factory StatisticsModel.fromJson(Map json) => _$StatisticsModelFromJson(json);
diff --git a/lib/features/consultant_rating/presentation/consultant_rating_screen.dart b/lib/features/consultant_rating/presentation/consultant_rating_screen.dart
index 8c6cb3d4..000367e0 100644
--- a/lib/features/consultant_rating/presentation/consultant_rating_screen.dart
+++ b/lib/features/consultant_rating/presentation/consultant_rating_screen.dart
@@ -1,6 +1,7 @@
import 'package:eatvio_app/core/locator_service.dart';
import 'package:eatvio_app/core/theme/custom_text_style.dart';
import 'package:eatvio_app/core/theme/theme_helper.dart';
+import 'package:eatvio_app/core/utils/toasts.dart';
import 'package:eatvio_app/core/widgets/custom_outlined_button.dart';
import 'package:eatvio_app/core/widgets/data_error_widget.dart';
import 'package:eatvio_app/features/consultant_rating/presentation/cubit/consultant_rating_cubit.dart';
@@ -10,6 +11,7 @@ import 'package:eatvio_app/features/consultant_rating/presentation/widgets/ratin
import 'package:eatvio_app/features/consultant_rating/presentation/widgets/statistic_widget.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
class ConsultantRatingScreen extends StatelessWidget {
@@ -53,8 +55,8 @@ class ConsultantRatingPageContent extends StatelessWidget {
child: Column(
children: [
const SizedBox(height: 16),
- const RatingWidget(
- rating: 1058,
+ RatingWidget(
+ rating: state.absoluteRating!,
),
const SizedBox(height: 16),
Padding(
@@ -67,7 +69,10 @@ class ConsultantRatingPageContent extends StatelessWidget {
side: const WidgetStatePropertyAll(BorderSide.none),
backgroundColor: WidgetStatePropertyAll(appTheme.blueA400),
),
- onPressed: () {},
+ onPressed: () {
+ Clipboard.setData(ClipboardData(text: state.statistics?.refLink ?? ''));
+ showInfoToast(s.link_was_copied);
+ },
),
),
const SizedBox(height: 16),
diff --git a/lib/features/consultant_rating/presentation/cubit/consultant_rating_cubit.dart b/lib/features/consultant_rating/presentation/cubit/consultant_rating_cubit.dart
index 291f450c..d3ff72a9 100644
--- a/lib/features/consultant_rating/presentation/cubit/consultant_rating_cubit.dart
+++ b/lib/features/consultant_rating/presentation/cubit/consultant_rating_cubit.dart
@@ -2,17 +2,23 @@ import 'dart:developer';
import 'package:eatvio_app/features/consultant_rating/presentation/cubit/consultant_rating_state.dart';
import 'package:eatvio_app/features/consultant_rating/repositories/consultant_rating_repository.dart';
+import 'package:eatvio_app/features/feed/repositories/feed_repository.dart';
+import 'package:eatvio_app/features/profile/repositories/profile_repository.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
class ConsultantRatingCubit extends Cubit {
final ConsultantRatingRepository repository;
- ConsultantRatingCubit(this.repository) : super(ConsultantRatingState());
+ final FeedRepository feedRepository;
+ final ProfileRepository profileRepository;
+
+ ConsultantRatingCubit({required this.repository, required this.feedRepository, required this.profileRepository}) : super(ConsultantRatingState());
Future getConsultantStatistics({String? date}) async {
try {
emit(state.copyWith(isStatisticsLoading: true));
final statistics = await repository.getConsultantStatistics(date: date);
- emit(state.copyWith(isStatisticsLoading: false, statistics: statistics, error: null));
+ final absoluteRating = await feedRepository.getConsultants((await profileRepository.getMyProfile()).name);
+ emit(state.copyWith(isStatisticsLoading: false, statistics: statistics, error: null, absoluteRating: absoluteRating.first.totalScores));
} catch (e, st) {
emit(state.copyWith(isStatisticsLoading: true, error: e.toString()));
log(e.toString(), stackTrace: st);
diff --git a/lib/features/consultant_rating/presentation/cubit/consultant_rating_state.dart b/lib/features/consultant_rating/presentation/cubit/consultant_rating_state.dart
index 20cc458f..7c1e0942 100644
--- a/lib/features/consultant_rating/presentation/cubit/consultant_rating_state.dart
+++ b/lib/features/consultant_rating/presentation/cubit/consultant_rating_state.dart
@@ -12,5 +12,6 @@ abstract class ConsultantRatingState with _$ConsultantRatingState {
@Default(null) StatisticsModel? statistics,
@Default(null) String? error,
@Default([]) List ratings,
+ @Default(0) int? absoluteRating,
}) = _ConsultantRatingState;
}
diff --git a/lib/features/consultant_rating/presentation/widgets/statistic_widget.dart b/lib/features/consultant_rating/presentation/widgets/statistic_widget.dart
index 3be44129..ef148adf 100644
--- a/lib/features/consultant_rating/presentation/widgets/statistic_widget.dart
+++ b/lib/features/consultant_rating/presentation/widgets/statistic_widget.dart
@@ -71,7 +71,7 @@ class StatisticWidget extends StatelessWidget {
children: [
Expanded(child: StatisticBouble(number: statistics?.consultationsCount ?? 0, title: s.consultations_count)),
const SizedBox(width: 8),
- Expanded(child: StatisticBouble(number: statistics?.qwe ?? 0, title: s.active_consultations_count)),
+ Expanded(child: StatisticBouble(number: statistics?.qwe ?? 0, title: s.added_products_in_glossary)),
],
),
const SizedBox(
diff --git a/lib/features/feed/repositories/feed_repository.dart b/lib/features/feed/repositories/feed_repository.dart
index 108a8b11..e540486f 100644
--- a/lib/features/feed/repositories/feed_repository.dart
+++ b/lib/features/feed/repositories/feed_repository.dart
@@ -133,9 +133,9 @@ class FeedRepository {
}
}
- Future> getConsultants() async {
+ Future> getConsultants([String? name]) async {
try {
- return (await feedService.getConsultants()).data;
+ return (await feedService.getConsultants(name: name)).data;
} catch (e) {
rethrow;
}
diff --git a/lib/features/feed/services/feed_service.dart b/lib/features/feed/services/feed_service.dart
index 265c2d38..c756f8c7 100644
--- a/lib/features/feed/services/feed_service.dart
+++ b/lib/features/feed/services/feed_service.dart
@@ -16,15 +16,10 @@ abstract class FeedService {
factory FeedService(Dio dio, {String baseUrl}) = _FeedService;
@GET('/api/blogPosts/index')
- Future getBlogPostList({
- @Query('page') required int page,
- @Query('query_search') String? query,
- });
+ Future getBlogPostList({@Query('page') required int page, @Query('query_search') String? query});
@GET('/api/blogPosts/show/{postId}')
- Future getBlogPost({
- @Path('postId') required int postId,
- });
+ Future getBlogPost({@Path('postId') required int postId});
@GET('/api/recipes/index')
Future getRecipes({
@@ -53,88 +48,50 @@ abstract class FeedService {
});
@GET('/api/blogPosts/{id}/comments/show')
- Future getBlogPostComments({
- @Path() required String id,
- });
+ Future getBlogPostComments({@Path() required String id});
@POST('/api/blogPosts/{id}/comment/create')
- Future sendBlogPostComment({
- @Path() required String id,
- @Part() required String body,
- @Part() int? parentCommentId,
- });
+ Future sendBlogPostComment({@Path() required String id, @Part() required String body, @Part() int? parentCommentId});
@GET('/api/diets/{id}/comments/show')
- Future getDietsComments({
- @Path() required String id,
- });
+ Future getDietsComments({@Path() required String id});
@POST('/api/diets/{id}/comment/create')
- Future sendDietsComment({
- @Path() required String id,
- @Part() required String body,
- @Part() int? parentCommentId,
- });
+ Future sendDietsComment({@Path() required String id, @Part() required String body, @Part() int? parentCommentId});
@GET('/api/plans/{slug}/comments/show')
- Future getPlansComments({
- @Path() required String slug,
- });
+ Future getPlansComments({@Path() required String slug});
@POST('/api/plans/{slug}/comment/create')
- Future sendPlansComment({
- @Path() required String slug,
- @Part() required String body,
- @Part() int? parentCommentId,
- });
+ Future sendPlansComment({@Path() required String slug, @Part() required String body, @Part() int? parentCommentId});
@GET('/api/recipes/{id}/comments/show')
- Future getRecipesComments({
- @Path() required String id,
- });
+ Future getRecipesComments({@Path() required String id});
@POST('/api/recipes/{id}/comment/create')
- Future sendRecipesComment({
- @Path() required String id,
- @Part() required String body,
- @Part() int? parentCommentId,
- });
+ Future sendRecipesComment({@Path() required String id, @Part() required String body, @Part() int? parentCommentId});
@POST('/api/blogPosts/{id}/like')
- Future likeBlogPost({
- @Path() required int id,
- });
+ Future likeBlogPost({@Path() required int id});
@POST('/api/blogPosts/{id}/unliked')
- Future unlikedBlogPost({
- @Path() required int id,
- });
+ Future unlikedBlogPost({@Path() required int id});
@GET('/api/consultants/index')
- Future getConsultants();
+ Future getConsultants({@Query('filters[name][\$startsWith]') String? name});
@POST('/api/blogPosts/{id}/view')
- Future viewPost({
- @Path() required int id,
- });
+ Future viewPost({@Path() required int id});
@POST('/api/recipes/{slug}/view')
- Future viewRecipe({
- @Path() required String slug,
- });
+ Future viewRecipe({@Path() required String slug});
@POST('/api/diets/{id}/view')
- Future viewDiet({
- @Path() required int id,
- });
+ Future viewDiet({@Path() required int id});
@POST('/api/plans/{slug}/view')
- Future viewPlan({
- @Path() required String slug,
- });
+ Future viewPlan({@Path() required String slug});
@POST('/api/views')
- Future viewContent({
- @Body() required ViewModel viewModel,
- });
+ Future viewContent({@Body() required ViewModel viewModel});
}
diff --git a/lib/features/menu/presentation/pages/menu_screen.dart b/lib/features/menu/presentation/pages/menu_screen.dart
index 5c350d3c..123e5faf 100644
--- a/lib/features/menu/presentation/pages/menu_screen.dart
+++ b/lib/features/menu/presentation/pages/menu_screen.dart
@@ -58,7 +58,7 @@ class MenuScreen extends StatelessWidget {
if (profileModel.roles.contains('consultant')) _divider(context),
if (profileModel.roles.contains('consultant'))
_tile(
- leading: 'assets/icons/finance.svg',
+ leading: 'assets/icons/consultant_rating_icon.svg',
title: 'Мой рейтинг',
onTap: () {
GoRouter.of(context).push(ConsultantRatingScreen.path);
diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart
index c054a4b5..dc9e4c16 100644
--- a/lib/generated/intl/messages_en.dart
+++ b/lib/generated/intl/messages_en.dart
@@ -66,6 +66,9 @@ class MessageLookup extends MessageLookupByLibrary {
"add_card": MessageLookupByLibrary.simpleMessage("Привязать карту"),
"add_cover": MessageLookupByLibrary.simpleMessage("Добавьте обложку"),
"add_measure": MessageLookupByLibrary.simpleMessage("Добавить замер"),
+ "added_products_in_glossary": MessageLookupByLibrary.simpleMessage(
+ "Кол-во продуктов добавленных в глоссарий",
+ ),
"adding_plan": MessageLookupByLibrary.simpleMessage("Добавление плана"),
"additional_information": MessageLookupByLibrary.simpleMessage(
"Дополнительная информация",
diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart
index 85f74918..0ccdeac3 100644
--- a/lib/generated/l10n.dart
+++ b/lib/generated/l10n.dart
@@ -2399,6 +2399,16 @@ class S {
);
}
+ /// `Кол-во продуктов добавленных в глоссарий`
+ String get added_products_in_glossary {
+ return Intl.message(
+ 'Кол-во продуктов добавленных в глоссарий',
+ name: 'added_products_in_glossary',
+ desc: '',
+ args: [],
+ );
+ }
+
/// `Кол-во активных консультаций`
String get active_consultations_count {
return Intl.message(
diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb
index 57145fb9..1fc575a8 100644
--- a/lib/l10n/intl_en.arb
+++ b/lib/l10n/intl_en.arb
@@ -300,6 +300,7 @@
"published_recipes_count": "Кол-во опубликованных рецептов",
"published_diets_count": "Кол-во опубликованных диет",
"consultations_count": "Кол-во проведенных консулдьтаций",
+ "added_products_in_glossary": "Кол-во продуктов добавленных в глоссарий",
"active_consultations_count": "Кол-во активных консультаций",
"rating_history": "Начисление рейтинга",
"something_went_wrong": "Упс! Что-то пошло не так",