diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 1fee690d..8e9edd22 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -388,7 +388,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Distribution: ITVIO, OOO (VL68C36HYS)";
CODE_SIGN_STYLE = Manual;
- CURRENT_PROJECT_VERSION = 73;
+ CURRENT_PROJECT_VERSION = 74;
DEVELOPMENT_TEAM = VL68C36HYS;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
@@ -539,7 +539,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Distribution: ITVIO, OOO (VL68C36HYS)";
CODE_SIGN_STYLE = Manual;
- CURRENT_PROJECT_VERSION = 73;
+ CURRENT_PROJECT_VERSION = 74;
DEVELOPMENT_TEAM = VL68C36HYS;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
@@ -578,7 +578,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Distribution: ITVIO, OOO (VL68C36HYS)";
CODE_SIGN_STYLE = Manual;
- CURRENT_PROJECT_VERSION = 73;
+ CURRENT_PROJECT_VERSION = 74;
DEVELOPMENT_TEAM = VL68C36HYS;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index f0f66aff..7e82c5b2 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -21,7 +21,7 @@
CFBundleSignature
????
CFBundleVersion
- 73
+ 74
ITSAppUsesNonExemptEncryption
LSRequiresIPhoneOS
diff --git a/lib/core/theme/theme_helper.dart b/lib/core/theme/theme_helper.dart
index c0c0af29..c202129e 100644
--- a/lib/core/theme/theme_helper.dart
+++ b/lib/core/theme/theme_helper.dart
@@ -204,6 +204,8 @@ class PrimaryColors {
Color get commentBg => const Color(0XFFFFFDD8);
Color get cardNotificationsBG => const Color(0xFFA4A4A4);
+
+ Color get grey7B => const Color(0xFF7B7B7B);
}
PrimaryColors get appTheme => ThemeHelper().themeColor();
diff --git a/lib/features/auth/presentation/pages/auth_screen.dart b/lib/features/auth/presentation/pages/auth_screen.dart
index 8a4e711b..ea457d6c 100644
--- a/lib/features/auth/presentation/pages/auth_screen.dart
+++ b/lib/features/auth/presentation/pages/auth_screen.dart
@@ -1,3 +1,5 @@
+// ignore_for_file: unused_element, duplicate_ignore
+
import 'dart:async';
import 'package:eatvio_app/core/app_router.dart';
import 'package:eatvio_app/core/const.dart';
@@ -365,6 +367,7 @@ class _AuthScreenState extends State {
}
}
+// ignore: unused_element
class _SocialButton extends StatelessWidget {
const _SocialButton({required this.onTap, required this.child, required this.backgroundColor, required this.tooltip});
@@ -391,6 +394,7 @@ class _SocialButton extends StatelessWidget {
}
}
+// ignore: unused_element
void _onVkPressed() async {
final accessToken = await SocialAuthFacade.signInWithVk();
if (accessToken == null) return;
diff --git a/lib/features/my_finance/models/card_model.dart b/lib/features/my_finance/models/card_model.dart
index 0435ea56..d248cace 100644
--- a/lib/features/my_finance/models/card_model.dart
+++ b/lib/features/my_finance/models/card_model.dart
@@ -15,6 +15,9 @@ abstract class CardModel with _$CardModel {
}
bool parseBool(dynamic json) {
+ if (json == null) {
+ throw Exception('parseBool: json is null');
+ }
if (json == 1 || json == true || json == '1') {
return true;
}
diff --git a/lib/features/profile/models/profile_model.dart b/lib/features/profile/models/profile_model.dart
index 03fd57f3..17eaa671 100644
--- a/lib/features/profile/models/profile_model.dart
+++ b/lib/features/profile/models/profile_model.dart
@@ -19,6 +19,7 @@ abstract class ProfileModel with _$ProfileModel {
@JsonKey(name: "updated_at") DateTime? updatedAt,
@JsonKey(name: "is_public_profile", fromJson: parseBool) required bool isPublicProfile,
@JsonKey(name: "is_blocked_by_me", fromJson: parseBool) required bool isBlockedByMe,
+ @JsonKey(name: "is_blocked_by_author", fromJson: parseBool) required bool isBlockedByAuthor,
@JsonKey(name: "is_blocked_by_user", fromJson: parseBool, defaultValue: false) required bool isBlockedByUser,
@JsonKey(name: 'is_entity_subscribed_by_me') required bool isEntitySubscribedByMe,
@JsonKey(name: "slug") required String slug,
diff --git a/lib/features/profile/presentation/pages/profile_screen.dart b/lib/features/profile/presentation/pages/profile_screen.dart
index 98966234..11ae9b7a 100644
--- a/lib/features/profile/presentation/pages/profile_screen.dart
+++ b/lib/features/profile/presentation/pages/profile_screen.dart
@@ -5,6 +5,7 @@ import 'package:eatvio_app/core/app_router.dart';
import 'package:eatvio_app/core/const.dart';
import 'package:eatvio_app/core/enums/complained_content.dart';
import 'package:eatvio_app/core/permission_handler/permission_handler.dart';
+import 'package:eatvio_app/core/theme/custom_text_style.dart';
import 'package:eatvio_app/core/utils/date_time_utils.dart';
import 'package:eatvio_app/core/widgets/data_error_widget.dart';
import 'package:eatvio_app/core/widgets/loader.dart';
@@ -93,30 +94,6 @@ class _ProfileScreenState extends State {
isFirstFetch = false;
}
- // Проверяем, заблокировал ли пользователь меня
- if (state.profile.isBlockedByUser) {
- return Scaffold(
- appBar: AppBar(),
- body: Center(
- child: Padding(
- padding: const EdgeInsets.all(32.0),
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- Icon(Icons.block, size: 64, color: Colors.grey[400]),
- const SizedBox(height: 16),
- Text(
- 'Пользователь ограничил доступ к своей странице',
- textAlign: TextAlign.center,
- style: TextStyle(fontSize: 18, fontWeight: FontWeight.w500, color: Colors.grey[600]),
- ),
- ],
- ),
- ),
- ),
- );
- }
-
return widget.author == null || widget.author!.authorIsMe ? _myProfileScreen(state) : _profileScreen(state);
} else if (state is ProfileStateError) {
return Scaffold(
@@ -198,11 +175,34 @@ class _ProfileScreenState extends State {
),
_subscriptionsAndSubscribers(state),
if (state.profile.badges.isNotEmpty) Padding(padding: const EdgeInsets.only(bottom: 16), child: _badges(state)),
- if (state.profile.roles.contains('consultant') && state.consultantInfo != null && !state.profile.isBlockedByMe) _socialLinks(state),
- if (state.profile.roles.contains('consultant') && state.consultantInfo != null && !state.profile.isBlockedByMe) _education(state),
- if (state.profile.roles.contains('consultant') && state.consultantInfo != null && !state.profile.isBlockedByMe) _diplomasAndCertificates(state),
- if (state.profile.roles.contains('consultant') && state.consultantInfo != null && !hidePlans && !state.profile.isBlockedByMe) _activePlans(state),
- if (state.blogPosts.isNotEmpty)
+ if (state.profile.isBlockedByAuthor)
+ Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Icon(Icons.block, size: 48, color: appTheme.grey7B),
+ const SizedBox(height: 16),
+ Center(
+ child: Text(
+ 'Пользователь ограничил доступ\nк своей странице',
+ textAlign: TextAlign.center,
+ style: TextStyles.textMSemibold.copyWith(color: appTheme.grey7B),
+ ),
+ ),
+ ],
+ ),
+ if (state.profile.roles.contains('consultant') && state.consultantInfo != null && !state.profile.isBlockedByMe && !state.profile.isBlockedByAuthor)
+ _socialLinks(state),
+ if (state.profile.roles.contains('consultant') && state.consultantInfo != null && !state.profile.isBlockedByMe && !state.profile.isBlockedByAuthor)
+ _education(state),
+ if (state.profile.roles.contains('consultant') && state.consultantInfo != null && !state.profile.isBlockedByMe && !state.profile.isBlockedByAuthor)
+ _diplomasAndCertificates(state),
+ if (state.profile.roles.contains('consultant') &&
+ state.consultantInfo != null &&
+ !hidePlans &&
+ !state.profile.isBlockedByMe &&
+ !state.profile.isBlockedByAuthor)
+ _activePlans(state),
+ if (state.blogPosts.isNotEmpty && !state.profile.isBlockedByAuthor && !state.profile.isBlockedByMe)
const Padding(
padding: EdgeInsets.only(left: 8, top: 16, bottom: 8),
child: Text(
@@ -210,7 +210,7 @@ class _ProfileScreenState extends State {
style: TextStyle(color: Color(0xFF323F4B), fontSize: 24, fontWeight: FontWeight.w600),
),
),
- _blogPosts(state),
+ if (state.blogPosts.isNotEmpty && !state.profile.isBlockedByAuthor && !state.profile.isBlockedByMe) _blogPosts(state),
],
),
),
diff --git a/pubspec.yaml b/pubspec.yaml
index 6861a603..5fec1116 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,6 +1,6 @@
name: eatvio_app
description: A new Flutter project.
-version: 1.2.13+73
+version: 1.2.14+74
publish_to: 'none'
environment:
diff --git a/test/features/profile/services/profile_service_test.dart b/test/features/profile/services/profile_service_test.dart
index 8c666344..5c773bc3 100644
--- a/test/features/profile/services/profile_service_test.dart
+++ b/test/features/profile/services/profile_service_test.dart
@@ -30,6 +30,7 @@ void main() {
badges: [],
subscriptions: [],
subscribers: [],
+ isBlockedByAuthor: false,
),
),
);
@@ -72,23 +73,17 @@ void main() {
});
test('getBlogPostByAuthorSlug', () async {
- when(mockProfileService.getBlogPostByAuthorSlug(slug: '')).thenAnswer(
- (_) async => [],
- );
+ when(mockProfileService.getBlogPostByAuthorSlug(slug: '')).thenAnswer((_) async => []);
expect(await mockProfileService.getBlogPostByAuthorSlug(slug: 'slug'), isA>());
});
test('getWeight', () async {
- when(mockProfileService.getWeight(period: '')).thenAnswer(
- (_) async => [],
- );
+ when(mockProfileService.getWeight(period: '')).thenAnswer((_) async => []);
expect(await mockProfileService.getWeight(period: ''), isA>());
});
test('getCircumferences', () async {
- when(mockProfileService.getCircumferences(period: '')).thenAnswer(
- (_) async => [],
- );
+ when(mockProfileService.getCircumferences(period: '')).thenAnswer((_) async => []);
expect(await mockProfileService.getCircumferences(period: ''), isA>());
});
});