diff --git a/.gitignore b/.gitignore index 4a5c4e73..5bb96d46 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ /.flutter-plugins-dependencies /.packages /node_modules/ +/android/app/release/app-release.aab +/android/app/upload-keystore.jks diff --git a/android/app/build.gradle b/android/app/build.gradle index 8719993b..a0e928b8 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -2,8 +2,6 @@ plugins { id "com.android.application" id "kotlin-android" id "dev.flutter.flutter-gradle-plugin" - - } def keystoreProperties = new Properties() @@ -15,7 +13,7 @@ if (keystorePropertiesFile.exists()) { android { namespace = "com.eatvioapp.app" compileSdk = flutter.compileSdkVersion - ndkVersion = "25.1.8937393" + ndkVersion = "27.0.12077973" compileOptions { sourceCompatibility = JavaVersion.VERSION_21 diff --git a/lib/core/initialization_cubit/ws_service.g.dart b/lib/core/initialization_cubit/ws_service.g.dart index c5a42eeb..ffca6af4 100644 --- a/lib/core/initialization_cubit/ws_service.g.dart +++ b/lib/core/initialization_cubit/ws_service.g.dart @@ -9,11 +9,7 @@ part of 'ws_service.dart'; // ignore_for_file: unnecessary_brace_in_string_interps,no_leading_underscores_for_local_identifiers,unused_element,unnecessary_string_interpolations class _WsService implements WsService { - _WsService( - this._dio, { - this.baseUrl, - this.errorLogger, - }); + _WsService(this._dio, {this.baseUrl, this.errorLogger}); final Dio _dio; @@ -27,22 +23,16 @@ class _WsService implements WsService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/ws/params', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/ws/params', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late WebsocketInfoModel _value; try { @@ -67,10 +57,7 @@ class _WsService implements WsService { return requestOptions; } - String _combineBaseUrls( - String dioBaseUrl, - String? baseUrl, - ) { + String _combineBaseUrls(String dioBaseUrl, String? baseUrl) { if (baseUrl == null || baseUrl.trim().isEmpty) { return dioBaseUrl; } diff --git a/lib/core/theme/text_styles.dart b/lib/core/theme/text_styles.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/features/auth/auth_screen/auth_screen.dart b/lib/features/auth/auth_screen/auth_screen.dart index 7e42bbed..31169305 100644 --- a/lib/features/auth/auth_screen/auth_screen.dart +++ b/lib/features/auth/auth_screen/auth_screen.dart @@ -17,6 +17,7 @@ import 'package:go_router/go_router.dart'; import 'package:http/http.dart' as http; import 'package:url_launcher/url_launcher.dart'; import 'package:validators/validators.dart'; +import 'package:webview_flutter/webview_flutter.dart'; import 'bloc/auth_bloc.dart'; import 'models/auth_model.dart'; @@ -43,11 +44,71 @@ class _AuthScreenState extends State { bool checkboxState = false; bool hidePassword = true; final baseUrlController = TextEditingController(); + late final WebViewController _controller; + + @override + void initState() { + super.initState(); + + _controller = WebViewController() + ..setJavaScriptMode(JavaScriptMode.unrestricted) + ..addJavaScriptChannel( + 'FlutterChannel', + onMessageReceived: (JavaScriptMessage message) { + // Handle messages from JavaScript + final data = jsonDecode(message.message); + final email = data['email']; + final password = data['password']; + print('Email: $email, Password: $password'); + }, + ) + ..setNavigationDelegate( + NavigationDelegate( + onPageFinished: (String url) async { + await _controller.runJavaScript(''' + function initializeListeners() { + const emailInput = document.getElementById("inputEmail_main"); + const passwordInput = document.getElementById("inputPassword_main"); + + if (emailInput && passwordInput) { + function sendToFlutter() { + const email = emailInput.value; + const password = passwordInput.value; + const data = JSON.stringify({ email: email, password: password }); + if (window.FlutterChannel) { + window.FlutterChannel.postMessage(data); + } + } + + emailInput.addEventListener("input", sendToFlutter); + passwordInput.addEventListener("input", sendToFlutter); + } else { + console.error("Email or Password input not found."); + } + } + + // Ensure DOM is loaded before attaching listeners + document.addEventListener("DOMContentLoaded", initializeListeners); + initializeListeners(); + '''); + }, + ), + ) + ..loadRequest(Uri.parse(baseUrl)); + } @override Widget build(BuildContext context) { FlutterNativeSplash.remove(); final s = S.of(context); + + return Scaffold( + appBar: AppBar( + toolbarHeight: 0, + ), + body: WebViewWidget(controller: _controller), + ); + return Scaffold( appBar: AppBar( centerTitle: true, diff --git a/lib/features/chat/presentation/widgets/chat_bubble_widget.dart b/lib/features/chat/presentation/widgets/chat_bubble_widget.dart index ca94dbf9..11c44530 100644 --- a/lib/features/chat/presentation/widgets/chat_bubble_widget.dart +++ b/lib/features/chat/presentation/widgets/chat_bubble_widget.dart @@ -110,7 +110,7 @@ class ChatBubbleWidget extends StatelessWidget { if (text.isNotEmpty) Text( text, - style: TextStyles.textFS13FW400.copyWith(color: appTheme.black), + style: TextStyles.textFS13FW400.copyWith(color: appTheme.black, fontSize: 16), ), SizedBox(height: 8), Padding( diff --git a/lib/features/chat/services/chat_service.g.dart b/lib/features/chat/services/chat_service.g.dart index 5034c597..25c122bc 100644 --- a/lib/features/chat/services/chat_service.g.dart +++ b/lib/features/chat/services/chat_service.g.dart @@ -9,11 +9,7 @@ part of 'chat_service.dart'; // ignore_for_file: unnecessary_brace_in_string_interps,no_leading_underscores_for_local_identifiers,unused_element,unnecessary_string_interpolations class _ChatService implements ChatService { - _ChatService( - this._dio, { - this.baseUrl, - this.errorLogger, - }); + _ChatService(this._dio, {this.baseUrl, this.errorLogger}); final Dio _dio; @@ -28,22 +24,16 @@ class _ChatService implements ChatService { queryParameters.removeWhere((k, v) => v == null); final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/chat/index', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/chat/index', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late ChatRoomPreviewModel _value; try { @@ -61,27 +51,23 @@ class _ChatService implements ChatService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType>(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/chat/show/${id}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType>( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/chat/show/${id}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late Map _value; try { - _value = _result.data!.map((k, dynamic v) => - MapEntry(k, ChatRoomModel.fromJson(v as Map))); + _value = _result.data!.map( + (k, dynamic v) => + MapEntry(k, ChatRoomModel.fromJson(v as Map)), + ); } on Object catch (e, s) { errorLogger?.logError(e, s, _options); rethrow; @@ -101,31 +87,26 @@ class _ChatService implements ChatService { final _headers = {}; final _data = FormData(); if (data != null) { - _data.fields.add(MapEntry( - 'data', - data, - )); + _data.fields.add(MapEntry('data', data)); } if (media_data != null) { _data.files.addAll(media_data.map((i) => MapEntry('media_data[]', i))); } - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - contentType: 'multipart/form-data', - ) - .compose( - _dio.options, - '/api/chat/${id}/message/send', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options( + method: 'POST', + headers: _headers, + extra: _extra, + contentType: 'multipart/form-data', + ) + .compose( + _dio.options, + '/api/chat/${id}/message/send', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -138,22 +119,16 @@ class _ChatService implements ChatService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/chat/show/${id}/messages?page=${page}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/chat/show/${id}/messages?page=${page}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late ChatMessagesModel _value; try { @@ -171,22 +146,16 @@ class _ChatService implements ChatService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/chat/get_by_user/${user}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/chat/get_by_user/${user}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late ChatRoomModel _value; try { @@ -211,10 +180,7 @@ class _ChatService implements ChatService { return requestOptions; } - String _combineBaseUrls( - String dioBaseUrl, - String? baseUrl, - ) { + String _combineBaseUrls(String dioBaseUrl, String? baseUrl) { if (baseUrl == null || baseUrl.trim().isEmpty) { return dioBaseUrl; } diff --git a/lib/features/diary/repositories/diary_repository.dart b/lib/features/diary/repositories/diary_repository.dart index b6d41427..66cfb73a 100644 --- a/lib/features/diary/repositories/diary_repository.dart +++ b/lib/features/diary/repositories/diary_repository.dart @@ -14,7 +14,11 @@ class DiaryRepository { }); Future getDiaryByDate(String date) async { - return (await getDiaryIndexByDate(date)).last; + try { + return (await getDiaryIndexByDate(date)).last; + } catch (e) { + rethrow; + } } Future> getDiaryIndexByDate(String date) async { diff --git a/lib/features/diets/services/diet_service.g.dart b/lib/features/diets/services/diet_service.g.dart index b701c1a3..03a54318 100644 --- a/lib/features/diets/services/diet_service.g.dart +++ b/lib/features/diets/services/diet_service.g.dart @@ -9,11 +9,7 @@ part of 'diet_service.dart'; // ignore_for_file: unnecessary_brace_in_string_interps,no_leading_underscores_for_local_identifiers,unused_element,unnecessary_string_interpolations class _DietService implements DietService { - _DietService( - this._dio, { - this.baseUrl, - this.errorLogger, - }); + _DietService(this._dio, {this.baseUrl, this.errorLogger}); final Dio _dio; @@ -27,22 +23,16 @@ class _DietService implements DietService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/diets/${id}/like', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/diets/${id}/like', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late DietLikesModel _value; try { @@ -60,22 +50,16 @@ class _DietService implements DietService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/diets/${id}/add_to_favorite', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/diets/${id}/add_to_favorite', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late Diet _value; try { @@ -93,22 +77,16 @@ class _DietService implements DietService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/diets/${id}/remove_from_favorite', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/diets/${id}/remove_from_favorite', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late Diet _value; try { @@ -126,22 +104,16 @@ class _DietService implements DietService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/diets/show/${id}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/diets/show/${id}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late Diet _value; try { @@ -163,22 +135,16 @@ class _DietService implements DietService { final _headers = {}; final _data = {}; _data.addAll(body); - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/diets/${id}/start', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/diets/${id}/start', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -188,22 +154,16 @@ class _DietService implements DietService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/diets/${id}/cancel', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/diets/${id}/cancel', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -220,10 +180,7 @@ class _DietService implements DietService { return requestOptions; } - String _combineBaseUrls( - String dioBaseUrl, - String? baseUrl, - ) { + String _combineBaseUrls(String dioBaseUrl, String? baseUrl) { if (baseUrl == null || baseUrl.trim().isEmpty) { return dioBaseUrl; } diff --git a/lib/features/feed/models/feed_blog_post_model.dart b/lib/features/feed/models/feed_blog_post_model.dart index 88eddbaf..69a1908d 100644 --- a/lib/features/feed/models/feed_blog_post_model.dart +++ b/lib/features/feed/models/feed_blog_post_model.dart @@ -18,7 +18,7 @@ class FeedBlogPostModel with _$FeedBlogPostModel { required String title, @JsonKey(name: "total_likes") required int totalLikes, @JsonKey(name: "total_views") required int totalViews, - @JsonKey(name: "total_comments") int? totalComments, + @JsonKey(name: "total_comments") required int totalComments, @JsonKey(name: "was_liked_by_me") required bool wasLikedByMe, }) = _FeedBlogPostModel; diff --git a/lib/features/feed/models/feed_blog_post_model.freezed.dart b/lib/features/feed/models/feed_blog_post_model.freezed.dart index 2d1870b0..4b2ad476 100644 --- a/lib/features/feed/models/feed_blog_post_model.freezed.dart +++ b/lib/features/feed/models/feed_blog_post_model.freezed.dart @@ -37,7 +37,7 @@ mixin _$FeedBlogPostModel { @JsonKey(name: "total_views") int get totalViews => throw _privateConstructorUsedError; @JsonKey(name: "total_comments") - int? get totalComments => throw _privateConstructorUsedError; + int get totalComments => throw _privateConstructorUsedError; @JsonKey(name: "was_liked_by_me") bool get wasLikedByMe => throw _privateConstructorUsedError; @@ -69,7 +69,7 @@ abstract class $FeedBlogPostModelCopyWith<$Res> { String title, @JsonKey(name: "total_likes") int totalLikes, @JsonKey(name: "total_views") int totalViews, - @JsonKey(name: "total_comments") int? totalComments, + @JsonKey(name: "total_comments") int totalComments, @JsonKey(name: "was_liked_by_me") bool wasLikedByMe}); $AuthorCopyWith<$Res> get author; @@ -101,7 +101,7 @@ class _$FeedBlogPostModelCopyWithImpl<$Res, $Val extends FeedBlogPostModel> Object? title = null, Object? totalLikes = null, Object? totalViews = null, - Object? totalComments = freezed, + Object? totalComments = null, Object? wasLikedByMe = null, }) { return _then(_value.copyWith( @@ -149,10 +149,10 @@ class _$FeedBlogPostModelCopyWithImpl<$Res, $Val extends FeedBlogPostModel> ? _value.totalViews : totalViews // ignore: cast_nullable_to_non_nullable as int, - totalComments: freezed == totalComments + totalComments: null == totalComments ? _value.totalComments : totalComments // ignore: cast_nullable_to_non_nullable - as int?, + as int, wasLikedByMe: null == wasLikedByMe ? _value.wasLikedByMe : wasLikedByMe // ignore: cast_nullable_to_non_nullable @@ -191,7 +191,7 @@ abstract class _$$FeedBlogPostModelImplCopyWith<$Res> String title, @JsonKey(name: "total_likes") int totalLikes, @JsonKey(name: "total_views") int totalViews, - @JsonKey(name: "total_comments") int? totalComments, + @JsonKey(name: "total_comments") int totalComments, @JsonKey(name: "was_liked_by_me") bool wasLikedByMe}); @override @@ -222,7 +222,7 @@ class __$$FeedBlogPostModelImplCopyWithImpl<$Res> Object? title = null, Object? totalLikes = null, Object? totalViews = null, - Object? totalComments = freezed, + Object? totalComments = null, Object? wasLikedByMe = null, }) { return _then(_$FeedBlogPostModelImpl( @@ -270,10 +270,10 @@ class __$$FeedBlogPostModelImplCopyWithImpl<$Res> ? _value.totalViews : totalViews // ignore: cast_nullable_to_non_nullable as int, - totalComments: freezed == totalComments + totalComments: null == totalComments ? _value.totalComments : totalComments // ignore: cast_nullable_to_non_nullable - as int?, + as int, wasLikedByMe: null == wasLikedByMe ? _value.wasLikedByMe : wasLikedByMe // ignore: cast_nullable_to_non_nullable @@ -297,7 +297,7 @@ class _$FeedBlogPostModelImpl implements _FeedBlogPostModel { required this.title, @JsonKey(name: "total_likes") required this.totalLikes, @JsonKey(name: "total_views") required this.totalViews, - @JsonKey(name: "total_comments") this.totalComments, + @JsonKey(name: "total_comments") required this.totalComments, @JsonKey(name: "was_liked_by_me") required this.wasLikedByMe}); factory _$FeedBlogPostModelImpl.fromJson(Map json) => @@ -332,7 +332,7 @@ class _$FeedBlogPostModelImpl implements _FeedBlogPostModel { final int totalViews; @override @JsonKey(name: "total_comments") - final int? totalComments; + final int totalComments; @override @JsonKey(name: "was_liked_by_me") final bool wasLikedByMe; @@ -420,7 +420,7 @@ abstract class _FeedBlogPostModel implements FeedBlogPostModel { required final String title, @JsonKey(name: "total_likes") required final int totalLikes, @JsonKey(name: "total_views") required final int totalViews, - @JsonKey(name: "total_comments") final int? totalComments, + @JsonKey(name: "total_comments") required final int totalComments, @JsonKey(name: "was_liked_by_me") required final bool wasLikedByMe}) = _$FeedBlogPostModelImpl; @@ -456,7 +456,7 @@ abstract class _FeedBlogPostModel implements FeedBlogPostModel { int get totalViews; @override @JsonKey(name: "total_comments") - int? get totalComments; + int get totalComments; @override @JsonKey(name: "was_liked_by_me") bool get wasLikedByMe; diff --git a/lib/features/feed/models/feed_blog_post_model.g.dart b/lib/features/feed/models/feed_blog_post_model.g.dart index 95da2b2b..024d2b47 100644 --- a/lib/features/feed/models/feed_blog_post_model.g.dart +++ b/lib/features/feed/models/feed_blog_post_model.g.dart @@ -20,7 +20,7 @@ _$FeedBlogPostModelImpl _$$FeedBlogPostModelImplFromJson( title: json['title'] as String, totalLikes: (json['total_likes'] as num).toInt(), totalViews: (json['total_views'] as num).toInt(), - totalComments: (json['total_comments'] as num?)?.toInt(), + totalComments: (json['total_comments'] as num).toInt(), wasLikedByMe: json['was_liked_by_me'] as bool, ); diff --git a/lib/features/feed/presentation/bloc/recipes_cubit/recipes_cubit.dart b/lib/features/feed/presentation/bloc/recipes_cubit/recipes_cubit.dart index 60fdb41a..ad9c01ad 100644 --- a/lib/features/feed/presentation/bloc/recipes_cubit/recipes_cubit.dart +++ b/lib/features/feed/presentation/bloc/recipes_cubit/recipes_cubit.dart @@ -86,4 +86,8 @@ class RecipesCubit extends Cubit { ), ); } + + likeRecipe(String slug) async => await feedRepository.likeRecipe(slug: slug); + + unlikeRecipe(String slug) async => await feedRepository.unlikeRecipe(slug: slug); } diff --git a/lib/features/feed/presentation/widgets/recipes.dart b/lib/features/feed/presentation/widgets/recipes.dart index 0f188c3b..e5dc0fa5 100644 --- a/lib/features/feed/presentation/widgets/recipes.dart +++ b/lib/features/feed/presentation/widgets/recipes.dart @@ -20,7 +20,10 @@ class Recipes extends StatelessWidget { shrinkWrap: true, physics: BouncingScrollPhysics(), itemBuilder: (context, index) { - return RecipesWidget(recipes: state.recipesList[index]); + return RecipesWidget( + recipes: state.recipesList[index], + index: index, + ); }, separatorBuilder: (context, index) { return SizedBox(height: 8); diff --git a/lib/features/feed/presentation/widgets/recipes_widget.dart b/lib/features/feed/presentation/widgets/recipes_widget.dart index f85d7fcc..d410793a 100644 --- a/lib/features/feed/presentation/widgets/recipes_widget.dart +++ b/lib/features/feed/presentation/widgets/recipes_widget.dart @@ -5,16 +5,24 @@ import 'package:eatvio_app/core/const.dart'; import 'package:eatvio_app/core/widgets/feed_icon_button.dart'; import 'package:eatvio_app/features/feed/models/recipes_model.dart'; import 'package:eatvio_app/core/theme/theme_helper.dart'; +import 'package:eatvio_app/features/feed/presentation/bloc/recipes_cubit/recipes_cubit.dart'; +import 'package:eatvio_app/features/feed/presentation/bloc/recipes_cubit/recipes_state.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_html/flutter_html.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:go_router/go_router.dart'; import 'package:share_plus/share_plus.dart'; class RecipesWidget extends StatefulWidget { + final int index; final Recipes recipes; - const RecipesWidget({super.key, required this.recipes}); + const RecipesWidget({ + super.key, + required this.recipes, + required this.index, + }); @override State createState() => _RecipesWidgetState(); @@ -22,6 +30,7 @@ class RecipesWidget extends StatefulWidget { class _RecipesWidgetState extends State { late bool isLiked; + late int totalLikes; @override void initState() { @@ -31,158 +40,167 @@ class _RecipesWidgetState extends State { @override Widget build(BuildContext context) { - return InkWell( - borderRadius: BorderRadius.circular(12), - onTap: () => GoRouter.of(context).pushNamed('aboutRecipesScreen', extra: widget.recipes), - child: Ink( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(12), - color: Colors.white, - ), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Stack( - children: [ - ClipRRect( - borderRadius: BorderRadius.vertical(top: Radius.circular(12)), - child: CachedNetworkImage( - imageUrl: baseUrl + '/storage/' + widget.recipes.image, - fit: BoxFit.fitWidth, - width: MediaQuery.of(context).size.width, - ), - ), - Positioned( - left: 8, - bottom: 8, - child: Wrap( - runSpacing: 8, + return BlocBuilder( + builder: (BuildContext context, RecipesState state) { + if (state is RecipesStateLoaded) { + isLiked = state.recipesList[widget.index].wasLikedByMe; + totalLikes = state.recipesList[widget.index].likesCount; + return InkWell( + borderRadius: BorderRadius.circular(12), + onTap: () => GoRouter.of(context).pushNamed('aboutRecipesScreen', extra: widget.recipes), + child: Ink( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + color: Colors.white, + ), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Stack( children: [ - _iconButton('assets/icons/clock.svg', widget.recipes.cookingTime.toString() + ' минут'), - SizedBox(width: 8), - _iconButton('assets/icons/steps.svg', '${widget.recipes.steps?.length ?? 0}' + ' этапов'), - SizedBox(width: 8), - _iconButton('assets/icons/calories.svg', '139.9 ккал'), + ClipRRect( + borderRadius: BorderRadius.vertical(top: Radius.circular(12)), + child: CachedNetworkImage( + imageUrl: baseUrl + '/storage/' + widget.recipes.image, + fit: BoxFit.fitWidth, + width: MediaQuery.of(context).size.width, + ), + ), + Positioned( + left: 8, + bottom: 8, + child: Wrap( + runSpacing: 8, + children: [ + _iconButton('assets/icons/clock.svg', widget.recipes.cookingTime.toString() + ' минут'), + SizedBox(width: 8), + _iconButton('assets/icons/steps.svg', widget.recipes.steps.length.toString() + ' этапов'), + SizedBox(width: 8), + _iconButton('assets/icons/calories.svg', widget.recipes.calories.toStringAsFixed(0) + ' ккал'), + ], + ), + ), ], ), - ), - ], - ), - SizedBox(height: 12), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 12), - child: Text( - widget.recipes.title.toString(), - style: TextStyle( - fontWeight: FontWeight.w600, - color: Colors.black87, - ), - ), - ), - if (widget.recipes.description.isNotEmpty) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 4), - child: Html( - data: widget.recipes.description.length > 200 ? widget.recipes.description.substring(0, 200) : widget.recipes.description, - style: { - "*": Style( - color: Colors.black87, - ), - }, - ), - ), - if (widget.recipes.description.length > 200) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16), - child: Text( - 'Читать полностью...', - style: TextStyle( - height: 1, - color: appTheme.blueA400, - decoration: TextDecoration.underline, - ), - ), - ), - SizedBox(height: 12), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 12), - child: Row( - children: [ - FeedIconButton( - icon: true ? Icons.favorite_rounded : Icons.favorite_border_rounded, - text: widget.recipes.likesCount.toString(), - iconColor: true ? Colors.red.withValues(alpha: 0.8) : null, - backgroundColor: true ? Colors.red.withValues(alpha: 0.1) : null, - textColor: true ? Colors.red.withValues(alpha: 0.8) : null, - onTap: () async { - // setState(() { - // isLiked = !isLiked; - // isLiked ? totalLikes++ : totalLikes--; - // }); - // isLiked - // ? await context.read().likePost(state.feedBlogPostList[widget.index].id) - // : await context.read().unlikedPost(state.feedBlogPostList[widget.index].id); - // await context.read().loadFeedBlogPostList(); - }, - ), - SizedBox(width: 8), - FeedIconButton( - svgIcon: SvgPicture.asset( - 'assets/icons/comment.svg', - height: 20, - width: 20, - colorFilter: ColorFilter.mode( - appTheme.gray600, - BlendMode.srcIn, + SizedBox(height: 12), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 12), + child: Text( + widget.recipes.title, + style: TextStyle( + fontWeight: FontWeight.w600, + color: Colors.black87, ), ), - text: widget.recipes.commentsCount.toString(), - onTap: () => GoRouter.of(context).pushNamed( - 'aboutRecipesScreen', - extra: widget.recipes, - ), ), - SizedBox(width: 8), - FeedIconButton( - svgIcon: SvgPicture.asset( - height: 20, - width: 20, - 'assets/icons/share.svg', - colorFilter: ColorFilter.mode(appTheme.gray600, BlendMode.srcIn), + if (widget.recipes.description.isNotEmpty) + Padding( + padding: const EdgeInsets.symmetric(horizontal: 4), + child: Html( + data: widget.recipes.description.length > 200 ? widget.recipes.description.substring(0, 200) : widget.recipes.description, + style: { + "*": Style( + color: Colors.black87, + ), + }, + ), ), - onTap: () { - final box = context.findRenderObject() as RenderBox?; - Share.shareUri( - Uri.parse( - baseUrl + '/ru/blog_post/' + widget.recipes.id.toString(), + if (widget.recipes.description.length > 200) + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Text( + 'Читать полностью...', + style: TextStyle( + height: 1, + color: appTheme.blueA400, + decoration: TextDecoration.underline, ), - sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size, - ); - }, - ), - Spacer(), - Icon( - Icons.visibility_rounded, - size: 16, - color: appTheme.gray500, - ), - SizedBox(width: 4), - Text( - widget.recipes.viewsCount.toString(), - style: TextStyle( - fontSize: 12, - color: appTheme.gray500, - fontWeight: FontWeight.w400, + ), + ), + SizedBox(height: 12), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 12), + child: Row( + children: [ + FeedIconButton( + icon: isLiked ? Icons.favorite_rounded : Icons.favorite_border_rounded, + text: widget.recipes.likesCount.toString(), + iconColor: isLiked ? Colors.red.withValues(alpha: 0.8) : null, + backgroundColor: isLiked ? Colors.red.withValues(alpha: 0.1) : null, + textColor: isLiked ? Colors.red.withValues(alpha: 0.8) : null, + onTap: () async { + setState(() { + isLiked = !isLiked; + isLiked ? totalLikes++ : totalLikes--; + }); + isLiked + ? await context.read().likeRecipe(state.recipesList[widget.index].slug) + : await context.read().unlikeRecipe(state.recipesList[widget.index].slug); + await context.read().loadRecipesList(); + }, + ), + SizedBox(width: 8), + FeedIconButton( + svgIcon: SvgPicture.asset( + 'assets/icons/comment.svg', + height: 20, + width: 20, + colorFilter: ColorFilter.mode( + appTheme.gray600, + BlendMode.srcIn, + ), + ), + text: widget.recipes.commentsCount.toString(), + onTap: () => GoRouter.of(context).pushNamed( + 'aboutRecipesScreen', + extra: widget.recipes, + ), + ), + SizedBox(width: 8), + FeedIconButton( + svgIcon: SvgPicture.asset( + height: 20, + width: 20, + 'assets/icons/share.svg', + colorFilter: ColorFilter.mode(appTheme.gray600, BlendMode.srcIn), + ), + onTap: () { + final box = context.findRenderObject() as RenderBox?; + Share.shareUri( + Uri.parse( + baseUrl + '/ru/blog_post/' + widget.recipes.id.toString(), + ), + sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size, + ); + }, + ), + Spacer(), + Icon( + Icons.visibility_rounded, + size: 16, + color: appTheme.gray500, + ), + SizedBox(width: 4), + Text( + widget.recipes.viewsCount.toString(), + style: TextStyle( + fontSize: 12, + color: appTheme.gray500, + fontWeight: FontWeight.w400, + ), + ), + ], ), ), + SizedBox(height: 12), ], ), ), - SizedBox(height: 12), - ], - ), - ), + ); + } + return Container(); + }, ); } diff --git a/lib/features/feed/repositories/feed_repository.dart b/lib/features/feed/repositories/feed_repository.dart index a90b4d5b..1f13becf 100644 --- a/lib/features/feed/repositories/feed_repository.dart +++ b/lib/features/feed/repositories/feed_repository.dart @@ -217,4 +217,24 @@ class FeedRepository { rethrow; } } + + Future likeRecipe({ + required String slug, + }) async { + try { + await feedService.likeRecipe(slug: slug); + } catch (e) { + rethrow; + } + } + + Future unlikeRecipe({ + required String slug, + }) async { + try { + await feedService.unlikeRecipe(slug: slug); + } catch (e) { + rethrow; + } + } } diff --git a/lib/features/feed/services/feed_service.dart b/lib/features/feed/services/feed_service.dart index 9551f16b..73ec0bcb 100644 --- a/lib/features/feed/services/feed_service.dart +++ b/lib/features/feed/services/feed_service.dart @@ -103,6 +103,16 @@ abstract class FeedService { @Path() required int id, }); + @POST('/api/recipes/{slug}/like') + Future likeRecipe({ + @Path() required String slug, + }); + + @POST('/api/recipes/{slug}/unliked') + Future unlikeRecipe({ + @Path() required String slug, + }); + @GET('/api/consultants/index') Future getConsultants(); } diff --git a/lib/features/feed/services/feed_service.g.dart b/lib/features/feed/services/feed_service.g.dart index c6668b66..951463e3 100644 --- a/lib/features/feed/services/feed_service.g.dart +++ b/lib/features/feed/services/feed_service.g.dart @@ -9,11 +9,7 @@ part of 'feed_service.dart'; // ignore_for_file: unnecessary_brace_in_string_interps,no_leading_underscores_for_local_identifiers,unused_element,unnecessary_string_interpolations class _FeedService implements FeedService { - _FeedService( - this._dio, { - this.baseUrl, - this.errorLogger, - }); + _FeedService(this._dio, {this.baseUrl, this.errorLogger}); final Dio _dio; @@ -34,22 +30,16 @@ class _FeedService implements FeedService { queryParameters.removeWhere((k, v) => v == null); final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/blogPosts/index', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/blogPosts/index', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late FeedBlogPostSettingsModel _value; try { @@ -76,22 +66,16 @@ class _FeedService implements FeedService { queryParameters.removeWhere((k, v) => v == null); final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/recipes/index', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/recipes/index', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late RecipesPagination _value; try { @@ -122,22 +106,16 @@ class _FeedService implements FeedService { queryParameters.removeWhere((k, v) => v == null); final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/diets/index', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/diets/index', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late DietsPagination _value; try { @@ -170,22 +148,16 @@ class _FeedService implements FeedService { queryParameters.removeWhere((k, v) => v == null); final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/plans/index', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/plans/index', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late PlanPaginationModel _value; try { @@ -203,22 +175,16 @@ class _FeedService implements FeedService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/blogPosts/${id}/comments/show', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/blogPosts/${id}/comments/show', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late CommentModel _value; try { @@ -241,32 +207,20 @@ class _FeedService implements FeedService { queryParameters.removeWhere((k, v) => v == null); final _headers = {}; final _data = FormData(); - _data.fields.add(MapEntry( - 'body', - body, - )); + _data.fields.add(MapEntry('body', body)); if (parentCommentId != null) { - _data.fields.add(MapEntry( - 'parentCommentId', - parentCommentId.toString(), - )); + _data.fields.add(MapEntry('parentCommentId', parentCommentId.toString())); } - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/blogPosts/${id}/comment/create', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/blogPosts/${id}/comment/create', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -276,22 +230,16 @@ class _FeedService implements FeedService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/diets/${id}/comments/show', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/diets/${id}/comments/show', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late CommentModel _value; try { @@ -314,32 +262,20 @@ class _FeedService implements FeedService { queryParameters.removeWhere((k, v) => v == null); final _headers = {}; final _data = FormData(); - _data.fields.add(MapEntry( - 'body', - body, - )); + _data.fields.add(MapEntry('body', body)); if (parentCommentId != null) { - _data.fields.add(MapEntry( - 'parentCommentId', - parentCommentId.toString(), - )); + _data.fields.add(MapEntry('parentCommentId', parentCommentId.toString())); } - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/diets/${id}/comment/create', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/diets/${id}/comment/create', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -349,22 +285,16 @@ class _FeedService implements FeedService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/plans/${slug}/comments/show', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/plans/${slug}/comments/show', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late CommentModel _value; try { @@ -387,32 +317,20 @@ class _FeedService implements FeedService { queryParameters.removeWhere((k, v) => v == null); final _headers = {}; final _data = FormData(); - _data.fields.add(MapEntry( - 'body', - body, - )); + _data.fields.add(MapEntry('body', body)); if (parentCommentId != null) { - _data.fields.add(MapEntry( - 'parentCommentId', - parentCommentId.toString(), - )); + _data.fields.add(MapEntry('parentCommentId', parentCommentId.toString())); } - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/plans/${slug}/comment/create', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/plans/${slug}/comment/create', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -422,22 +340,16 @@ class _FeedService implements FeedService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/recipes/${id}/comments/show', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/recipes/${id}/comments/show', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late CommentModel _value; try { @@ -460,32 +372,20 @@ class _FeedService implements FeedService { queryParameters.removeWhere((k, v) => v == null); final _headers = {}; final _data = FormData(); - _data.fields.add(MapEntry( - 'body', - body, - )); + _data.fields.add(MapEntry('body', body)); if (parentCommentId != null) { - _data.fields.add(MapEntry( - 'parentCommentId', - parentCommentId.toString(), - )); + _data.fields.add(MapEntry('parentCommentId', parentCommentId.toString())); } - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/recipes/${id}/comment/create', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/recipes/${id}/comment/create', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -495,22 +395,16 @@ class _FeedService implements FeedService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/blogPosts/${id}/like', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/blogPosts/${id}/like', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -520,22 +414,54 @@ class _FeedService implements FeedService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/blogPosts/${id}/unliked', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/blogPosts/${id}/unliked', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); + await _dio.fetch(_options); + } + + @override + Future likeRecipe({required String slug}) async { + final _extra = {}; + final queryParameters = {}; + final _headers = {}; + const Map? _data = null; + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/recipes/${slug}/like', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); + await _dio.fetch(_options); + } + + @override + Future unlikeRecipe({required String slug}) async { + final _extra = {}; + final queryParameters = {}; + final _headers = {}; + const Map? _data = null; + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/recipes/${slug}/unliked', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -545,22 +471,16 @@ class _FeedService implements FeedService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/consultants/index', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/consultants/index', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late FeedConsultantPaginationModel _value; try { @@ -585,10 +505,7 @@ class _FeedService implements FeedService { return requestOptions; } - String _combineBaseUrls( - String dioBaseUrl, - String? baseUrl, - ) { + String _combineBaseUrls(String dioBaseUrl, String? baseUrl) { if (baseUrl == null || baseUrl.trim().isEmpty) { return dioBaseUrl; } diff --git a/lib/features/menu/presentation/pages/menu_screen.dart b/lib/features/menu/presentation/pages/menu_screen.dart index c935af35..a1102186 100644 --- a/lib/features/menu/presentation/pages/menu_screen.dart +++ b/lib/features/menu/presentation/pages/menu_screen.dart @@ -120,11 +120,12 @@ class MenuScreen extends StatelessWidget { _onTapLogout(BuildContext context) { return () async { - final response = await sl().post( - baseUrl + '/api/profile/logout', - ); - - if (response.statusCode == 204) { + try { + await sl().post( + baseUrl + '/api/profile/logout', + ); + } catch (e) { + } finally { await TokenStorage.removeTokenInStorage(); GoRouter.of(context).go('/auth-screen'); } diff --git a/lib/features/my_diets/services/my_diets_service.g.dart b/lib/features/my_diets/services/my_diets_service.g.dart index 61371ae2..f9244073 100644 --- a/lib/features/my_diets/services/my_diets_service.g.dart +++ b/lib/features/my_diets/services/my_diets_service.g.dart @@ -9,11 +9,7 @@ part of 'my_diets_service.dart'; // ignore_for_file: unnecessary_brace_in_string_interps,no_leading_underscores_for_local_identifiers,unused_element,unnecessary_string_interpolations class _MyDietsService implements MyDietsService { - _MyDietsService( - this._dio, { - this.baseUrl, - this.errorLogger, - }); + _MyDietsService(this._dio, {this.baseUrl, this.errorLogger}); final Dio _dio; @@ -40,22 +36,16 @@ class _MyDietsService implements MyDietsService { queryParameters.removeWhere((k, v) => v == null); final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/my_diets', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/my_diets', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late DietsPagination _value; try { @@ -73,22 +63,16 @@ class _MyDietsService implements MyDietsService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/diets/delete/${dietId}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/diets/delete/${dietId}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -105,10 +89,7 @@ class _MyDietsService implements MyDietsService { return requestOptions; } - String _combineBaseUrls( - String dioBaseUrl, - String? baseUrl, - ) { + String _combineBaseUrls(String dioBaseUrl, String? baseUrl) { if (baseUrl == null || baseUrl.trim().isEmpty) { return dioBaseUrl; } diff --git a/lib/features/my_plans/services/my_plans_service.g.dart b/lib/features/my_plans/services/my_plans_service.g.dart index dd70281f..4e4804e0 100644 --- a/lib/features/my_plans/services/my_plans_service.g.dart +++ b/lib/features/my_plans/services/my_plans_service.g.dart @@ -9,11 +9,7 @@ part of 'my_plans_service.dart'; // ignore_for_file: unnecessary_brace_in_string_interps,no_leading_underscores_for_local_identifiers,unused_element,unnecessary_string_interpolations class _MyPlansService implements MyPlansService { - _MyPlansService( - this._dio, { - this.baseUrl, - this.errorLogger, - }); + _MyPlansService(this._dio, {this.baseUrl, this.errorLogger}); final Dio _dio; @@ -42,22 +38,16 @@ class _MyPlansService implements MyPlansService { queryParameters.removeWhere((k, v) => v == null); final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/plans/index', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/plans/index', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late PlanPaginationModel _value; try { @@ -75,22 +65,16 @@ class _MyPlansService implements MyPlansService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/plans/delete/${slug}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/plans/delete/${slug}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -107,10 +91,7 @@ class _MyPlansService implements MyPlansService { return requestOptions; } - String _combineBaseUrls( - String dioBaseUrl, - String? baseUrl, - ) { + String _combineBaseUrls(String dioBaseUrl, String? baseUrl) { if (baseUrl == null || baseUrl.trim().isEmpty) { return dioBaseUrl; } diff --git a/lib/features/plans/services/plan_service.g.dart b/lib/features/plans/services/plan_service.g.dart index 71abb5af..09f90b41 100644 --- a/lib/features/plans/services/plan_service.g.dart +++ b/lib/features/plans/services/plan_service.g.dart @@ -9,11 +9,7 @@ part of 'plan_service.dart'; // ignore_for_file: unnecessary_brace_in_string_interps,no_leading_underscores_for_local_identifiers,unused_element,unnecessary_string_interpolations class _PlanService implements PlanService { - _PlanService( - this._dio, { - this.baseUrl, - this.errorLogger, - }); + _PlanService(this._dio, {this.baseUrl, this.errorLogger}); final Dio _dio; @@ -27,22 +23,16 @@ class _PlanService implements PlanService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/plans/show/${slug}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/plans/show/${slug}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late PlanModel _value; try { @@ -60,22 +50,16 @@ class _PlanService implements PlanService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/plans/${slug}/like', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/plans/${slug}/like', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -85,22 +69,16 @@ class _PlanService implements PlanService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/plans/${slug}/add_to_favorite', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/plans/${slug}/add_to_favorite', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -110,22 +88,16 @@ class _PlanService implements PlanService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/plans/${slug}/remove_from_favorite', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/plans/${slug}/remove_from_favorite', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -142,10 +114,7 @@ class _PlanService implements PlanService { return requestOptions; } - String _combineBaseUrls( - String dioBaseUrl, - String? baseUrl, - ) { + String _combineBaseUrls(String dioBaseUrl, String? baseUrl) { if (baseUrl == null || baseUrl.trim().isEmpty) { return dioBaseUrl; } diff --git a/lib/features/plans/services/plans_service.g.dart b/lib/features/plans/services/plans_service.g.dart index 7fe37d3d..3e4ebdf1 100644 --- a/lib/features/plans/services/plans_service.g.dart +++ b/lib/features/plans/services/plans_service.g.dart @@ -9,11 +9,7 @@ part of 'plans_service.dart'; // ignore_for_file: unnecessary_brace_in_string_interps,no_leading_underscores_for_local_identifiers,unused_element,unnecessary_string_interpolations class _PlansService implements PlansService { - _PlansService( - this._dio, { - this.baseUrl, - this.errorLogger, - }); + _PlansService(this._dio, {this.baseUrl, this.errorLogger}); final Dio _dio; @@ -27,22 +23,16 @@ class _PlansService implements PlansService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/plans/get_by_author/${author}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/plans/get_by_author/${author}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late PlanPaginationModel _value; try { @@ -67,10 +57,7 @@ class _PlansService implements PlansService { return requestOptions; } - String _combineBaseUrls( - String dioBaseUrl, - String? baseUrl, - ) { + String _combineBaseUrls(String dioBaseUrl, String? baseUrl) { if (baseUrl == null || baseUrl.trim().isEmpty) { return dioBaseUrl; } diff --git a/lib/features/profile/presentation/pages/profile_screen.dart b/lib/features/profile/presentation/pages/profile_screen.dart index fb4f11d8..788a5f3f 100644 --- a/lib/features/profile/presentation/pages/profile_screen.dart +++ b/lib/features/profile/presentation/pages/profile_screen.dart @@ -59,6 +59,7 @@ class _ProfileScreenState extends State { late bool canSub; bool isFirstFetch = true; int _currentBullet = 0; + @override void initState() { super.initState(); @@ -658,6 +659,8 @@ class _ProfileScreenState extends State { ) : CachedNetworkImage( imageUrl: baseUrl + '/storage/' + state.profile.badges[i].image, + width: 40, + height: 40, ), i < state.profile.badges.length - 1 ? const SizedBox(width: 8) : const SizedBox.shrink(), ], diff --git a/lib/features/profile/presentation/widgets/circumference_chart_widget.dart b/lib/features/profile/presentation/widgets/circumference_chart_widget.dart index d7673989..8a303db7 100644 --- a/lib/features/profile/presentation/widgets/circumference_chart_widget.dart +++ b/lib/features/profile/presentation/widgets/circumference_chart_widget.dart @@ -131,7 +131,7 @@ class _CircumferenceChartWidgetState extends State { ), ), Stack( - alignment: Alignment.bottomRight, + alignment: Alignment.center, children: [ SfCartesianChart( margin: EdgeInsets.symmetric(horizontal: 8), @@ -172,115 +172,127 @@ class _CircumferenceChartWidgetState extends State { tooltipBehavior: TooltipBehavior(enable: true), ), if (widget.profileCubit != null) - FloatingActionButton.small( - heroTag: 'addCircumference', - onPressed: () { - if (widget.circumferencePoints.isNotEmpty) { - chest = widget.circumferencePoints.last.chestCircumference; - waist = widget.circumferencePoints.last.waistCircumference; - hip = widget.circumferencePoints.last.hipCircumference; - chestController = FixedExtentScrollController(initialItem: chest - 20); - waistController = FixedExtentScrollController(initialItem: waist - 20); - hipController = FixedExtentScrollController(initialItem: hip - 20); - } else { - chestController = FixedExtentScrollController(); - waistController = FixedExtentScrollController(); - hipController = FixedExtentScrollController(); - } - showModalBottomSheet( - useRootNavigator: true, - context: context, - builder: (context) { - return Column( - children: [ - Expanded( - child: Row( - children: [ - Expanded( - child: CupertinoPicker( - magnification: 1.22, - squeeze: 1.2, - useMagnifier: true, - scrollController: chestController, - itemExtent: 24, - onSelectedItemChanged: (int value) { - chest = value; - }, - children: [ - for (int i = 20; i < 200; i++) Text('$i'), - ], + Positioned( + right: 16, + bottom: 16, + child: FloatingActionButton.small( + heroTag: 'addCircumference', + onPressed: () { + if (widget.circumferencePoints.isNotEmpty) { + chest = widget.circumferencePoints.last.chestCircumference; + waist = widget.circumferencePoints.last.waistCircumference; + hip = widget.circumferencePoints.last.hipCircumference; + chestController = FixedExtentScrollController(initialItem: chest - 20); + waistController = FixedExtentScrollController(initialItem: waist - 20); + hipController = FixedExtentScrollController(initialItem: hip - 20); + } else { + chestController = FixedExtentScrollController(); + waistController = FixedExtentScrollController(); + hipController = FixedExtentScrollController(); + } + showModalBottomSheet( + useRootNavigator: true, + context: context, + builder: (context) { + return Column( + children: [ + Expanded( + child: Row( + children: [ + Expanded( + child: CupertinoPicker( + magnification: 1.22, + squeeze: 1.2, + useMagnifier: true, + scrollController: chestController, + itemExtent: 24, + onSelectedItemChanged: (int value) { + chest = value; + }, + children: [ + for (int i = 20; i < 200; i++) Text('$i'), + ], + ), ), - ), - Expanded( - child: CupertinoPicker( - magnification: 1.22, - squeeze: 1.2, - useMagnifier: true, - scrollController: waistController, - itemExtent: 24, - onSelectedItemChanged: (int value) { - waist = value; - }, - children: [ - for (int i = 20; i < 200; i++) Text('$i'), - ], + Expanded( + child: CupertinoPicker( + magnification: 1.22, + squeeze: 1.2, + useMagnifier: true, + scrollController: waistController, + itemExtent: 24, + onSelectedItemChanged: (int value) { + waist = value; + }, + children: [ + for (int i = 20; i < 200; i++) Text('$i'), + ], + ), ), - ), - Expanded( - child: CupertinoPicker( - magnification: 1.22, - squeeze: 1.2, - useMagnifier: true, - scrollController: hipController, - itemExtent: 24, - onSelectedItemChanged: (int value) { - hip = value; - }, - children: [ - for (int i = 20; i < 200; i++) Text('$i'), - ], + Expanded( + child: CupertinoPicker( + magnification: 1.22, + squeeze: 1.2, + useMagnifier: true, + scrollController: hipController, + itemExtent: 24, + onSelectedItemChanged: (int value) { + hip = value; + }, + children: [ + for (int i = 20; i < 200; i++) Text('$i'), + ], + ), ), - ), - ], - ), - ), - InkWell( - onTap: () { - widget.profileCubit?.addCircumference( - chestCircumference: chest + 20, - waistCircumference: waist + 20, - hipCircumference: hip + 20, - ); - Navigator.of(context).pop(); - }, - borderRadius: BorderRadius.circular(16), - child: Ink( - width: MediaQuery.of(context).size.width - 32, - padding: EdgeInsets.all(16), - decoration: BoxDecoration( - color: appTheme.blueA400, - borderRadius: BorderRadius.circular(16), + ], ), - child: Center( - child: Text( - 'Сохранить', - style: TextStyle( - color: Colors.white, + ), + InkWell( + onTap: () { + widget.profileCubit?.addCircumference( + chestCircumference: chest + 20, + waistCircumference: waist + 20, + hipCircumference: hip + 20, + ); + Navigator.of(context).pop(); + }, + borderRadius: BorderRadius.circular(16), + child: Ink( + width: MediaQuery.of(context).size.width - 32, + padding: EdgeInsets.all(16), + decoration: BoxDecoration( + color: appTheme.blueA400, + borderRadius: BorderRadius.circular(16), + ), + child: Center( + child: Text( + 'Сохранить', + style: TextStyle( + color: Colors.white, + ), ), ), ), ), - ), - ], - ); - }, - ); - }, - backgroundColor: appTheme.blueA400, - shape: CircleBorder(), - child: Icon( - Icons.add, - color: Colors.white, + ], + ); + }, + ); + }, + backgroundColor: appTheme.blueA400, + shape: CircleBorder(), + child: Icon( + Icons.add, + color: Colors.white, + ), + ), + ), + if (widget.circumferencePoints.isEmpty) + Padding( + padding: const EdgeInsets.symmetric(horizontal: 48), + child: Text( + 'Добавьте Ваши замеры', + textAlign: TextAlign.center, ), ), ], diff --git a/lib/features/profile/presentation/widgets/imt_chart_widget.dart b/lib/features/profile/presentation/widgets/imt_chart_widget.dart index 14dc3dee..782a27b1 100644 --- a/lib/features/profile/presentation/widgets/imt_chart_widget.dart +++ b/lib/features/profile/presentation/widgets/imt_chart_widget.dart @@ -45,38 +45,44 @@ class ImtChartWidget extends StatelessWidget { ], ), ), - SfCartesianChart( - margin: EdgeInsets.symmetric(horizontal: 8), - enableAxisAnimation: true, - plotAreaBorderWidth: 0, - trackballBehavior: TrackballBehavior( - enable: true, - activationMode: ActivationMode.singleTap, - tooltipDisplayMode: TrackballDisplayMode.groupAllPoints, - tooltipSettings: InteractiveTooltip(), - lineType: TrackballLineType.vertical, - ), - primaryXAxis: DateTimeCategoryAxis( - tickPosition: TickPosition.inside, - majorTickLines: MajorTickLines( - size: 0, + Stack( + alignment: Alignment.center, + children: [ + SfCartesianChart( + margin: EdgeInsets.symmetric(horizontal: 8), + enableAxisAnimation: true, + plotAreaBorderWidth: 0, + trackballBehavior: TrackballBehavior( + enable: true, + activationMode: ActivationMode.singleTap, + tooltipDisplayMode: TrackballDisplayMode.groupAllPoints, + tooltipSettings: InteractiveTooltip(), + lineType: TrackballLineType.vertical, + ), + primaryXAxis: DateTimeCategoryAxis( + tickPosition: TickPosition.inside, + majorTickLines: MajorTickLines( + size: 0, + ), + edgeLabelPlacement: EdgeLabelPlacement.shift, + dateFormat: DateFormat.MMMd('ru'), + labelStyle: TextStyle( + color: Colors.grey, + ), + majorGridLines: MajorGridLines(dashArray: [1], color: Colors.grey.withValues(alpha: 0.3)), + axisLine: AxisLine( + color: Colors.grey.withValues(alpha: 0.3), + width: 0.4, + ), + ), + primaryYAxis: NumericAxis( + isVisible: false, + ), + series: _getSplineSeries(), + tooltipBehavior: TooltipBehavior(enable: true), ), - edgeLabelPlacement: EdgeLabelPlacement.shift, - dateFormat: DateFormat.MMMd('ru'), - labelStyle: TextStyle( - color: Colors.grey, - ), - majorGridLines: MajorGridLines(dashArray: [1], color: Colors.grey.withValues(alpha: 0.3)), - axisLine: AxisLine( - color: Colors.grey.withValues(alpha: 0.3), - width: 0.4, - ), - ), - primaryYAxis: NumericAxis( - isVisible: false, - ), - series: _getSplineSeries(), - tooltipBehavior: TooltipBehavior(enable: true), + if (weightPoints.isEmpty) Text('Индекс Массы Тела рассчитывается при указанных весе и росте'), + ], ), ], ); diff --git a/lib/features/profile/presentation/widgets/weight_chart_widget.dart b/lib/features/profile/presentation/widgets/weight_chart_widget.dart index ecce8728..efaa7af6 100644 --- a/lib/features/profile/presentation/widgets/weight_chart_widget.dart +++ b/lib/features/profile/presentation/widgets/weight_chart_widget.dart @@ -13,7 +13,7 @@ class WeightChartWidget extends StatefulWidget { const WeightChartWidget({ super.key, required this.weightPoints, - this.profileCubit, + this.profileCubit, }); @override @@ -70,7 +70,7 @@ class _WeightChartWidgetState extends State { ), ), Stack( - alignment: Alignment.bottomRight, + alignment: Alignment.center, children: [ SfCartesianChart( margin: EdgeInsets.symmetric(horizontal: 8), @@ -112,99 +112,104 @@ class _WeightChartWidgetState extends State { tooltipBehavior: TooltipBehavior(enable: true), ), if (widget.profileCubit != null) - FloatingActionButton.small( - heroTag: 'addWeight', - onPressed: () { - if (widget.weightPoints.isNotEmpty) { - try { - weightKilo = int.parse(widget.weightPoints.last.weight.toString().split('.')[0]); - weightGrams = int.parse(widget.weightPoints.last.weight.toString().split('.')[1][0]); - } catch (e) { - weightGrams = 0; + Positioned( + right: 16, + bottom: 16, + child: FloatingActionButton.small( + heroTag: 'addWeight', + onPressed: () { + if (widget.weightPoints.isNotEmpty) { + try { + weightKilo = int.parse(widget.weightPoints.last.weight.toString().split('.')[0]); + weightGrams = int.parse(widget.weightPoints.last.weight.toString().split('.')[1][0]); + } catch (e) { + weightGrams = 0; + } + weightKiloController = FixedExtentScrollController(initialItem: weightKilo - 20); + weightGramsController = FixedExtentScrollController(initialItem: weightGrams); + } else { + weightKiloController = FixedExtentScrollController(); + weightGramsController = FixedExtentScrollController(); } - weightKiloController = FixedExtentScrollController(initialItem: weightKilo - 20); - weightGramsController = FixedExtentScrollController(initialItem: weightGrams); - } else { - weightKiloController = FixedExtentScrollController(); - weightGramsController = FixedExtentScrollController(); - } - showModalBottomSheet( - useRootNavigator: true, - context: context, - builder: (context) { - return Column( - children: [ - Expanded( - child: Row( - children: [ - Expanded( - child: CupertinoPicker( - magnification: 1.22, - squeeze: 1.2, - useMagnifier: true, - scrollController: weightKiloController, - itemExtent: 24, - onSelectedItemChanged: (int value) { - weightKilo = value + 20; - }, - children: [ - for (int i = 20; i < 300; i++) Text('$i'), - ], + showModalBottomSheet( + useRootNavigator: true, + context: context, + builder: (context) { + return Column( + children: [ + Expanded( + child: Row( + children: [ + Expanded( + child: CupertinoPicker( + magnification: 1.22, + squeeze: 1.2, + useMagnifier: true, + scrollController: weightKiloController, + itemExtent: 24, + onSelectedItemChanged: (int value) { + weightKilo = value + 20; + }, + children: [ + for (int i = 20; i < 300; i++) Text('$i'), + ], + ), ), - ), - Expanded( - child: CupertinoPicker( - magnification: 1.22, - squeeze: 1.2, - useMagnifier: true, - scrollController: weightGramsController, - itemExtent: 24, - onSelectedItemChanged: (int value) { - weightGrams = value; - }, - children: [ - for (int i = 0; i < 10; i++) Text('$i'), - ], + Expanded( + child: CupertinoPicker( + magnification: 1.22, + squeeze: 1.2, + useMagnifier: true, + scrollController: weightGramsController, + itemExtent: 24, + onSelectedItemChanged: (int value) { + weightGrams = value; + }, + children: [ + for (int i = 0; i < 10; i++) Text('$i'), + ], + ), ), - ), - ], - ), - ), - InkWell( - onTap: () { - widget.profileCubit?.addWeight(weight: double.parse('$weightKilo.$weightGrams')); - Navigator.of(context).pop(); - }, - borderRadius: BorderRadius.circular(16), - child: Ink( - width: MediaQuery.of(context).size.width - 32, - padding: EdgeInsets.all(16), - decoration: BoxDecoration( - color: appTheme.blueA400, - borderRadius: BorderRadius.circular(16), + ], ), - child: Center( - child: Text( - 'Сохранить', - style: TextStyle( - color: Colors.white, + ), + InkWell( + onTap: () { + widget.profileCubit?.addWeight(weight: double.parse('$weightKilo.$weightGrams')); + Navigator.of(context).pop(); + }, + borderRadius: BorderRadius.circular(16), + child: Ink( + width: MediaQuery.of(context).size.width - 32, + padding: EdgeInsets.all(16), + decoration: BoxDecoration( + color: appTheme.blueA400, + borderRadius: BorderRadius.circular(16), + ), + child: Center( + child: Text( + 'Сохранить', + style: TextStyle( + color: Colors.white, + ), ), ), ), ), - ), - ], - ); - }, - ); - }, - backgroundColor: appTheme.blueA400, - shape: CircleBorder(), - child: Icon( - Icons.add, - color: Colors.white, + ], + ); + }, + ); + }, + backgroundColor: appTheme.blueA400, + shape: CircleBorder(), + child: Icon( + Icons.add, + color: Colors.white, + ), ), ), + if (widget.weightPoints.isEmpty) Text('Добавьте Ваш вес'), ], ), ], diff --git a/lib/features/profile/services/profile_service.g.dart b/lib/features/profile/services/profile_service.g.dart index 4d9c61a4..1ac6c499 100644 --- a/lib/features/profile/services/profile_service.g.dart +++ b/lib/features/profile/services/profile_service.g.dart @@ -9,11 +9,7 @@ part of 'profile_service.dart'; // ignore_for_file: unnecessary_brace_in_string_interps,no_leading_underscores_for_local_identifiers,unused_element,unnecessary_string_interpolations class _ProfileService implements ProfileService { - _ProfileService( - this._dio, { - this.baseUrl, - this.errorLogger, - }); + _ProfileService(this._dio, {this.baseUrl, this.errorLogger}); final Dio _dio; @@ -27,22 +23,16 @@ class _ProfileService implements ProfileService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/show/${slug}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/show/${slug}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late ProfileModel _value; try { @@ -60,22 +50,16 @@ class _ProfileService implements ProfileService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/index', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/index', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late ProfileModel _value; try { @@ -93,22 +77,16 @@ class _ProfileService implements ProfileService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/detailz', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/detailz', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late ProfileDetailsModel _value; try { @@ -121,28 +99,23 @@ class _ProfileService implements ProfileService { } @override - Future getProfileDetailsBySlug( - {required String slug}) async { + Future getProfileDetailsBySlug({ + required String slug, + }) async { final _extra = {}; final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/detailz/${slug}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/detailz/${slug}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late ProfileDetailsModel _value; try { @@ -164,34 +137,25 @@ class _ProfileService implements ProfileService { final queryParameters = {}; final _headers = {}; final _data = FormData(); - _data.fields.add(MapEntry( - 'chest_circumference', - chestCircumference.toString(), - )); - _data.fields.add(MapEntry( - 'waist_circumference', - waistCircumference.toString(), - )); - _data.fields.add(MapEntry( - 'hip_circumference', - hipCircumference.toString(), - )); - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/addCircumference', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + _data.fields.add( + MapEntry('chest_circumference', chestCircumference.toString()), + ); + _data.fields.add( + MapEntry('waist_circumference', waistCircumference.toString()), + ); + _data.fields.add( + MapEntry('hip_circumference', hipCircumference.toString()), + ); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/addCircumference', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -201,58 +165,46 @@ class _ProfileService implements ProfileService { final queryParameters = {}; final _headers = {}; final _data = FormData(); - _data.fields.add(MapEntry( - 'weight', - weight.toString(), - )); - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/addWeight', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + _data.fields.add(MapEntry('weight', weight.toString())); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/addWeight', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @override - Future> getBlogPostByAuthorSlug( - {required String slug}) async { + Future> getBlogPostByAuthorSlug({ + required String slug, + }) async { final _extra = {}; final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType>(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/blogPosts/search_by_author/${slug}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType>( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/blogPosts/search_by_author/${slug}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late List _value; try { _value = _result.data! - .map((dynamic i) => - FeedBlogPostModel.fromJson(i as Map)) + .map( + (dynamic i) => + FeedBlogPostModel.fromJson(i as Map), + ) .toList(); } on Object catch (e, s) { errorLogger?.logError(e, s, _options); @@ -267,27 +219,23 @@ class _ProfileService implements ProfileService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType>(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/measure/weight/${period}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType>( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/measure/weight/${period}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late List _value; try { _value = _result.data! - .map((dynamic i) => WeightModel.fromJson(i as Map)) + .map( + (dynamic i) => WeightModel.fromJson(i as Map), + ) .toList(); } on Object catch (e, s) { errorLogger?.logError(e, s, _options); @@ -305,27 +253,23 @@ class _ProfileService implements ProfileService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType>(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/measure/weight/${period}/${slug}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType>( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/measure/weight/${period}/${slug}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late List _value; try { _value = _result.data! - .map((dynamic i) => WeightModel.fromJson(i as Map)) + .map( + (dynamic i) => WeightModel.fromJson(i as Map), + ) .toList(); } on Object catch (e, s) { errorLogger?.logError(e, s, _options); @@ -335,34 +279,31 @@ class _ProfileService implements ProfileService { } @override - Future> getCircumferences( - {required String period}) async { + Future> getCircumferences({ + required String period, + }) async { final _extra = {}; final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType>(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/measure/circumferences/${period}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType>( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/measure/circumferences/${period}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late List _value; try { _value = _result.data! - .map((dynamic i) => - CircumferenceModel.fromJson(i as Map)) + .map( + (dynamic i) => + CircumferenceModel.fromJson(i as Map), + ) .toList(); } on Object catch (e, s) { errorLogger?.logError(e, s, _options); @@ -380,28 +321,24 @@ class _ProfileService implements ProfileService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType>(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/measure/circumferences/${period}/{user}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType>( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/measure/circumferences/${period}/{user}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late List _value; try { _value = _result.data! - .map((dynamic i) => - CircumferenceModel.fromJson(i as Map)) + .map( + (dynamic i) => + CircumferenceModel.fromJson(i as Map), + ) .toList(); } on Object catch (e, s) { errorLogger?.logError(e, s, _options); @@ -417,27 +354,21 @@ class _ProfileService implements ProfileService { }) async { final _extra = {}; final queryParameters = { - r'filters[name][$startsWith]': query + r'filters[name][$startsWith]': query, }; queryParameters.removeWhere((k, v) => v == null); final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/${slug}/subscribers', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/${slug}/subscribers', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late SubPaginationModel _value; try { @@ -456,27 +387,21 @@ class _ProfileService implements ProfileService { }) async { final _extra = {}; final queryParameters = { - r'filters[name][$startsWith]': query + r'filters[name][$startsWith]': query, }; queryParameters.removeWhere((k, v) => v == null); final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/${slug}/subscriptions', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/${slug}/subscriptions', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late SubPaginationModel _value; try { @@ -494,22 +419,16 @@ class _ProfileService implements ProfileService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/subscribe/${slug}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/subscribe/${slug}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -519,22 +438,16 @@ class _ProfileService implements ProfileService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/unsubscribe/${slug}', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'POST', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/unsubscribe/${slug}', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -544,30 +457,30 @@ class _ProfileService implements ProfileService { final queryParameters = {}; final _headers = {}; final _data = FormData(); - _data.files.add(MapEntry( - 'photo', - MultipartFile.fromFileSync( - photo.path, - filename: photo.path.split(Platform.pathSeparator).last, + _data.files.add( + MapEntry( + 'photo', + MultipartFile.fromFileSync( + photo.path, + filename: photo.path.split(Platform.pathSeparator).last, + ), ), - )); - final _options = _setStreamType(Options( - method: 'POST', - headers: _headers, - extra: _extra, - contentType: 'multipart/form-data', - ) - .compose( - _dio.options, - '/api/profile/photo/upload', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + ); + final _options = _setStreamType( + Options( + method: 'POST', + headers: _headers, + extra: _extra, + contentType: 'multipart/form-data', + ) + .compose( + _dio.options, + '/api/profile/photo/upload', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -577,22 +490,16 @@ class _ProfileService implements ProfileService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'DELETE', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/photo/delete', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'DELETE', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/photo/delete', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); await _dio.fetch(_options); } @@ -602,22 +509,16 @@ class _ProfileService implements ProfileService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType(Options( - method: 'GET', - headers: _headers, - extra: _extra, - ) - .compose( - _dio.options, - '/api/profile/chosen_diets', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - ))); + final _options = _setStreamType( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + '/api/profile/chosen_diets', + queryParameters: queryParameters, + data: _data, + ) + .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), + ); final _result = await _dio.fetch>(_options); late ChosenDietsPaginationModel _value; try { @@ -642,10 +543,7 @@ class _ProfileService implements ProfileService { return requestOptions; } - String _combineBaseUrls( - String dioBaseUrl, - String? baseUrl, - ) { + String _combineBaseUrls(String dioBaseUrl, String? baseUrl) { if (baseUrl == null || baseUrl.trim().isEmpty) { return dioBaseUrl; } diff --git a/lib/features/recipes/models/recipe_create_model.dart b/lib/features/recipes/models/recipe_create_model.dart new file mode 100644 index 00000000..e8f4dbf7 --- /dev/null +++ b/lib/features/recipes/models/recipe_create_model.dart @@ -0,0 +1,37 @@ +import 'package:eatvio_app/features/recipes/models/ingredient.dart'; +import 'package:eatvio_app/features/recipes/models/step.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'recipe_create_model.freezed.dart'; + +part 'recipe_create_model.g.dart'; + +enum RecipeType { + first_meals, + second_meals, + salads, + snacks, + sweets, + drinks, + other +} + +@freezed +class RecipeCreateModel with _$RecipeCreateModel { + const factory RecipeCreateModel({ + required String title, + required String state, + required String description, + required RecipeType type, + @JsonKey(name: 'video_url') String? videoUrl, + @JsonKey(name: 'cooking_time') String? cookingTime, + @JsonKey(name: 'active_time') String? activeTime, + required String servings, + @JsonKey(name: 'energy_per_serving') required String energyPerServing, + required List tags, + required List ingredients, + required List steps, + }) = _RecipeCreateModel; + + factory RecipeCreateModel.fromJson(Map json) => _$RecipeCreateModelFromJson(json); +} diff --git a/lib/features/recipes/models/recipe_create_model.freezed.dart b/lib/features/recipes/models/recipe_create_model.freezed.dart new file mode 100644 index 00000000..3f93559b --- /dev/null +++ b/lib/features/recipes/models/recipe_create_model.freezed.dart @@ -0,0 +1,442 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'recipe_create_model.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + +RecipeCreateModel _$RecipeCreateModelFromJson(Map json) { + return _RecipeCreateModel.fromJson(json); +} + +/// @nodoc +mixin _$RecipeCreateModel { + String get title => throw _privateConstructorUsedError; + String get state => throw _privateConstructorUsedError; + String get description => throw _privateConstructorUsedError; + RecipeType get type => throw _privateConstructorUsedError; + @JsonKey(name: 'video_url') + String? get videoUrl => throw _privateConstructorUsedError; + @JsonKey(name: 'cooking_time') + String? get cookingTime => throw _privateConstructorUsedError; + @JsonKey(name: 'active_time') + String? get activeTime => throw _privateConstructorUsedError; + String get servings => throw _privateConstructorUsedError; + @JsonKey(name: 'energy_per_serving') + String get energyPerServing => throw _privateConstructorUsedError; + List get tags => throw _privateConstructorUsedError; + List get ingredients => throw _privateConstructorUsedError; + List get steps => throw _privateConstructorUsedError; + + /// Serializes this RecipeCreateModel to a JSON map. + Map toJson() => throw _privateConstructorUsedError; + + /// Create a copy of RecipeCreateModel + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + $RecipeCreateModelCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $RecipeCreateModelCopyWith<$Res> { + factory $RecipeCreateModelCopyWith( + RecipeCreateModel value, $Res Function(RecipeCreateModel) then) = + _$RecipeCreateModelCopyWithImpl<$Res, RecipeCreateModel>; + @useResult + $Res call( + {String title, + String state, + String description, + RecipeType type, + @JsonKey(name: 'video_url') String? videoUrl, + @JsonKey(name: 'cooking_time') String? cookingTime, + @JsonKey(name: 'active_time') String? activeTime, + String servings, + @JsonKey(name: 'energy_per_serving') String energyPerServing, + List tags, + List ingredients, + List steps}); +} + +/// @nodoc +class _$RecipeCreateModelCopyWithImpl<$Res, $Val extends RecipeCreateModel> + implements $RecipeCreateModelCopyWith<$Res> { + _$RecipeCreateModelCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + /// Create a copy of RecipeCreateModel + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? title = null, + Object? state = null, + Object? description = null, + Object? type = null, + Object? videoUrl = freezed, + Object? cookingTime = freezed, + Object? activeTime = freezed, + Object? servings = null, + Object? energyPerServing = null, + Object? tags = null, + Object? ingredients = null, + Object? steps = null, + }) { + return _then(_value.copyWith( + title: null == title + ? _value.title + : title // ignore: cast_nullable_to_non_nullable + as String, + state: null == state + ? _value.state + : state // ignore: cast_nullable_to_non_nullable + as String, + description: null == description + ? _value.description + : description // ignore: cast_nullable_to_non_nullable + as String, + type: null == type + ? _value.type + : type // ignore: cast_nullable_to_non_nullable + as RecipeType, + videoUrl: freezed == videoUrl + ? _value.videoUrl + : videoUrl // ignore: cast_nullable_to_non_nullable + as String?, + cookingTime: freezed == cookingTime + ? _value.cookingTime + : cookingTime // ignore: cast_nullable_to_non_nullable + as String?, + activeTime: freezed == activeTime + ? _value.activeTime + : activeTime // ignore: cast_nullable_to_non_nullable + as String?, + servings: null == servings + ? _value.servings + : servings // ignore: cast_nullable_to_non_nullable + as String, + energyPerServing: null == energyPerServing + ? _value.energyPerServing + : energyPerServing // ignore: cast_nullable_to_non_nullable + as String, + tags: null == tags + ? _value.tags + : tags // ignore: cast_nullable_to_non_nullable + as List, + ingredients: null == ingredients + ? _value.ingredients + : ingredients // ignore: cast_nullable_to_non_nullable + as List, + steps: null == steps + ? _value.steps + : steps // ignore: cast_nullable_to_non_nullable + as List, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$RecipeCreateModelImplCopyWith<$Res> + implements $RecipeCreateModelCopyWith<$Res> { + factory _$$RecipeCreateModelImplCopyWith(_$RecipeCreateModelImpl value, + $Res Function(_$RecipeCreateModelImpl) then) = + __$$RecipeCreateModelImplCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {String title, + String state, + String description, + RecipeType type, + @JsonKey(name: 'video_url') String? videoUrl, + @JsonKey(name: 'cooking_time') String? cookingTime, + @JsonKey(name: 'active_time') String? activeTime, + String servings, + @JsonKey(name: 'energy_per_serving') String energyPerServing, + List tags, + List ingredients, + List steps}); +} + +/// @nodoc +class __$$RecipeCreateModelImplCopyWithImpl<$Res> + extends _$RecipeCreateModelCopyWithImpl<$Res, _$RecipeCreateModelImpl> + implements _$$RecipeCreateModelImplCopyWith<$Res> { + __$$RecipeCreateModelImplCopyWithImpl(_$RecipeCreateModelImpl _value, + $Res Function(_$RecipeCreateModelImpl) _then) + : super(_value, _then); + + /// Create a copy of RecipeCreateModel + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? title = null, + Object? state = null, + Object? description = null, + Object? type = null, + Object? videoUrl = freezed, + Object? cookingTime = freezed, + Object? activeTime = freezed, + Object? servings = null, + Object? energyPerServing = null, + Object? tags = null, + Object? ingredients = null, + Object? steps = null, + }) { + return _then(_$RecipeCreateModelImpl( + title: null == title + ? _value.title + : title // ignore: cast_nullable_to_non_nullable + as String, + state: null == state + ? _value.state + : state // ignore: cast_nullable_to_non_nullable + as String, + description: null == description + ? _value.description + : description // ignore: cast_nullable_to_non_nullable + as String, + type: null == type + ? _value.type + : type // ignore: cast_nullable_to_non_nullable + as RecipeType, + videoUrl: freezed == videoUrl + ? _value.videoUrl + : videoUrl // ignore: cast_nullable_to_non_nullable + as String?, + cookingTime: freezed == cookingTime + ? _value.cookingTime + : cookingTime // ignore: cast_nullable_to_non_nullable + as String?, + activeTime: freezed == activeTime + ? _value.activeTime + : activeTime // ignore: cast_nullable_to_non_nullable + as String?, + servings: null == servings + ? _value.servings + : servings // ignore: cast_nullable_to_non_nullable + as String, + energyPerServing: null == energyPerServing + ? _value.energyPerServing + : energyPerServing // ignore: cast_nullable_to_non_nullable + as String, + tags: null == tags + ? _value._tags + : tags // ignore: cast_nullable_to_non_nullable + as List, + ingredients: null == ingredients + ? _value._ingredients + : ingredients // ignore: cast_nullable_to_non_nullable + as List, + steps: null == steps + ? _value._steps + : steps // ignore: cast_nullable_to_non_nullable + as List, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$RecipeCreateModelImpl implements _RecipeCreateModel { + const _$RecipeCreateModelImpl( + {required this.title, + required this.state, + required this.description, + required this.type, + @JsonKey(name: 'video_url') this.videoUrl, + @JsonKey(name: 'cooking_time') this.cookingTime, + @JsonKey(name: 'active_time') this.activeTime, + required this.servings, + @JsonKey(name: 'energy_per_serving') required this.energyPerServing, + required final List tags, + required final List ingredients, + required final List steps}) + : _tags = tags, + _ingredients = ingredients, + _steps = steps; + + factory _$RecipeCreateModelImpl.fromJson(Map json) => + _$$RecipeCreateModelImplFromJson(json); + + @override + final String title; + @override + final String state; + @override + final String description; + @override + final RecipeType type; + @override + @JsonKey(name: 'video_url') + final String? videoUrl; + @override + @JsonKey(name: 'cooking_time') + final String? cookingTime; + @override + @JsonKey(name: 'active_time') + final String? activeTime; + @override + final String servings; + @override + @JsonKey(name: 'energy_per_serving') + final String energyPerServing; + final List _tags; + @override + List get tags { + if (_tags is EqualUnmodifiableListView) return _tags; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_tags); + } + + final List _ingredients; + @override + List get ingredients { + if (_ingredients is EqualUnmodifiableListView) return _ingredients; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_ingredients); + } + + final List _steps; + @override + List get steps { + if (_steps is EqualUnmodifiableListView) return _steps; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_steps); + } + + @override + String toString() { + return 'RecipeCreateModel(title: $title, state: $state, description: $description, type: $type, videoUrl: $videoUrl, cookingTime: $cookingTime, activeTime: $activeTime, servings: $servings, energyPerServing: $energyPerServing, tags: $tags, ingredients: $ingredients, steps: $steps)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$RecipeCreateModelImpl && + (identical(other.title, title) || other.title == title) && + (identical(other.state, state) || other.state == state) && + (identical(other.description, description) || + other.description == description) && + (identical(other.type, type) || other.type == type) && + (identical(other.videoUrl, videoUrl) || + other.videoUrl == videoUrl) && + (identical(other.cookingTime, cookingTime) || + other.cookingTime == cookingTime) && + (identical(other.activeTime, activeTime) || + other.activeTime == activeTime) && + (identical(other.servings, servings) || + other.servings == servings) && + (identical(other.energyPerServing, energyPerServing) || + other.energyPerServing == energyPerServing) && + const DeepCollectionEquality().equals(other._tags, _tags) && + const DeepCollectionEquality() + .equals(other._ingredients, _ingredients) && + const DeepCollectionEquality().equals(other._steps, _steps)); + } + + @JsonKey(includeFromJson: false, includeToJson: false) + @override + int get hashCode => Object.hash( + runtimeType, + title, + state, + description, + type, + videoUrl, + cookingTime, + activeTime, + servings, + energyPerServing, + const DeepCollectionEquality().hash(_tags), + const DeepCollectionEquality().hash(_ingredients), + const DeepCollectionEquality().hash(_steps)); + + /// Create a copy of RecipeCreateModel + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + @override + @pragma('vm:prefer-inline') + _$$RecipeCreateModelImplCopyWith<_$RecipeCreateModelImpl> get copyWith => + __$$RecipeCreateModelImplCopyWithImpl<_$RecipeCreateModelImpl>( + this, _$identity); + + @override + Map toJson() { + return _$$RecipeCreateModelImplToJson( + this, + ); + } +} + +abstract class _RecipeCreateModel implements RecipeCreateModel { + const factory _RecipeCreateModel( + {required final String title, + required final String state, + required final String description, + required final RecipeType type, + @JsonKey(name: 'video_url') final String? videoUrl, + @JsonKey(name: 'cooking_time') final String? cookingTime, + @JsonKey(name: 'active_time') final String? activeTime, + required final String servings, + @JsonKey(name: 'energy_per_serving') + required final String energyPerServing, + required final List tags, + required final List ingredients, + required final List steps}) = _$RecipeCreateModelImpl; + + factory _RecipeCreateModel.fromJson(Map json) = + _$RecipeCreateModelImpl.fromJson; + + @override + String get title; + @override + String get state; + @override + String get description; + @override + RecipeType get type; + @override + @JsonKey(name: 'video_url') + String? get videoUrl; + @override + @JsonKey(name: 'cooking_time') + String? get cookingTime; + @override + @JsonKey(name: 'active_time') + String? get activeTime; + @override + String get servings; + @override + @JsonKey(name: 'energy_per_serving') + String get energyPerServing; + @override + List get tags; + @override + List get ingredients; + @override + List get steps; + + /// Create a copy of RecipeCreateModel + /// with the given fields replaced by the non-null parameter values. + @override + @JsonKey(includeFromJson: false, includeToJson: false) + _$$RecipeCreateModelImplCopyWith<_$RecipeCreateModelImpl> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/lib/features/recipes/models/recipe_create_model.g.dart b/lib/features/recipes/models/recipe_create_model.g.dart new file mode 100644 index 00000000..f64cb737 --- /dev/null +++ b/lib/features/recipes/models/recipe_create_model.g.dart @@ -0,0 +1,55 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'recipe_create_model.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_$RecipeCreateModelImpl _$$RecipeCreateModelImplFromJson( + Map json) => + _$RecipeCreateModelImpl( + title: json['title'] as String, + state: json['state'] as String, + description: json['description'] as String, + type: $enumDecode(_$RecipeTypeEnumMap, json['type']), + videoUrl: json['video_url'] as String?, + cookingTime: json['cooking_time'] as String?, + activeTime: json['active_time'] as String?, + servings: json['servings'] as String, + energyPerServing: json['energy_per_serving'] as String, + tags: (json['tags'] as List).map((e) => e as String).toList(), + ingredients: (json['ingredients'] as List) + .map((e) => Ingredient.fromJson(e as Map)) + .toList(), + steps: (json['steps'] as List) + .map((e) => Step.fromJson(e as Map)) + .toList(), + ); + +Map _$$RecipeCreateModelImplToJson( + _$RecipeCreateModelImpl instance) => + { + 'title': instance.title, + 'state': instance.state, + 'description': instance.description, + 'type': _$RecipeTypeEnumMap[instance.type]!, + 'video_url': instance.videoUrl, + 'cooking_time': instance.cookingTime, + 'active_time': instance.activeTime, + 'servings': instance.servings, + 'energy_per_serving': instance.energyPerServing, + 'tags': instance.tags, + 'ingredients': instance.ingredients, + 'steps': instance.steps, + }; + +const _$RecipeTypeEnumMap = { + RecipeType.first_meals: 'first_meals', + RecipeType.second_meals: 'second_meals', + RecipeType.salads: 'salads', + RecipeType.snacks: 'snacks', + RecipeType.sweets: 'sweets', + RecipeType.drinks: 'drinks', + RecipeType.other: 'other', +}; diff --git a/lib/features/registration/presentation/pages/additional_information_screen.dart b/lib/features/registration/presentation/pages/additional_information_screen.dart index 71a47550..437fe06f 100644 --- a/lib/features/registration/presentation/pages/additional_information_screen.dart +++ b/lib/features/registration/presentation/pages/additional_information_screen.dart @@ -41,7 +41,6 @@ class _AdditionalInformationScreenState extends State { SizedBox(height: 4), CustomTextFormField( controller: enterInformationController, - hintText: "Я занимаюсь плаванием , почти каждый вечер прогулки на свежем воздухе, пару раз в месяц играю в волейбол. Стараюсь не сидеть на месте!", - textInputAction: TextInputAction.done, focusNode: infoFocusNode, autofocus: true, maxLines: 8, diff --git a/lib/features/support/presentation/pages/support_screen.dart b/lib/features/support/presentation/pages/support_screen.dart index b4f84a00..00e51c42 100644 --- a/lib/features/support/presentation/pages/support_screen.dart +++ b/lib/features/support/presentation/pages/support_screen.dart @@ -15,7 +15,12 @@ class SupportScreen extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.all(16), - child: Text('Если у вас есть вопросы по работе нашего приложения, вы можете задать их, перейдя по ссылке:'), + child: Text( + 'Если у вас есть вопросы по работе нашего приложения, вы можете задать их, перейдя по ссылке:', + style: TextStyle( + fontSize: 16, + ), + ), ), InkWell( onTap: () { @@ -35,7 +40,12 @@ class SupportScreen extends StatelessWidget { colorFilter: ColorFilter.mode(Colors.black, BlendMode.srcIn), ), const SizedBox(width: 12), - Text('Telegram'), + Text( + 'Telegram', + style: TextStyle( + fontSize: 16, + ), + ), ], ), ), @@ -56,7 +66,12 @@ class SupportScreen extends StatelessWidget { children: [ Icon(Icons.alternate_email_rounded), const SizedBox(width: 12), - Text('E-mail'), + Text( + 'E-mail', + style: TextStyle( + fontSize: 16, + ), + ), ], ), ), diff --git a/lib/generated/intl/messages_all.dart b/lib/generated/intl/messages_all.dart index abae25a5..3139e159 100644 --- a/lib/generated/intl/messages_all.dart +++ b/lib/generated/intl/messages_all.dart @@ -39,8 +39,10 @@ MessageLookupByLibrary? _findExact(String localeName) { /// User programs should call this before using [localeName] for messages. Future initializeMessages(String localeName) { var availableLocale = Intl.verifiedLocale( - localeName, (locale) => _deferredLibraries[locale] != null, - onFailure: (_) => null); + localeName, + (locale) => _deferredLibraries[locale] != null, + onFailure: (_) => null, + ); if (availableLocale == null) { return new SynchronousFuture(false); } @@ -60,8 +62,11 @@ bool _messagesExistFor(String locale) { } MessageLookupByLibrary? _findGeneratedMessagesFor(String locale) { - var actualLocale = - Intl.verifiedLocale(locale, _messagesExistFor, onFailure: (_) => null); + var actualLocale = Intl.verifiedLocale( + locale, + _messagesExistFor, + onFailure: (_) => null, + ); if (actualLocale == null) return null; return _findExact(actualLocale); } diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart index a894ea49..7fbaf5bc 100644 --- a/lib/generated/intl/messages_en.dart +++ b/lib/generated/intl/messages_en.dart @@ -22,324 +22,375 @@ class MessageLookup extends MessageLookupByLibrary { final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { - "Moscow": MessageLookupByLibrary.simpleMessage("Москва"), - "Russia": MessageLookupByLibrary.simpleMessage("Россия"), - "about_diet": MessageLookupByLibrary.simpleMessage("Об этой диете"), - "about_plan": MessageLookupByLibrary.simpleMessage("Об этом плане"), - "active": MessageLookupByLibrary.simpleMessage("Активен"), - "active_diet_state": MessageLookupByLibrary.simpleMessage("Активная"), - "add": MessageLookupByLibrary.simpleMessage("Добавить"), - "add_cover": MessageLookupByLibrary.simpleMessage("Добавьте обложку"), - "add_measure": MessageLookupByLibrary.simpleMessage("Добавить замер"), - "adding_plan": MessageLookupByLibrary.simpleMessage("Добавление плана"), - "additional_information": - MessageLookupByLibrary.simpleMessage("Дополнительная информация"), - "admin": MessageLookupByLibrary.simpleMessage("Админ"), - "all": MessageLookupByLibrary.simpleMessage("Все"), - "allergies_presence": - MessageLookupByLibrary.simpleMessage("Наличие аллергии"), - "another_form_of_comment": - MessageLookupByLibrary.simpleMessage("комментария"), - "another_form_of_day": MessageLookupByLibrary.simpleMessage("дня"), - "answer": MessageLookupByLibrary.simpleMessage("Ответить"), - "archived": MessageLookupByLibrary.simpleMessage("В архиве"), - "authentificate": MessageLookupByLibrary.simpleMessage("Войти"), - "average_pressure": MessageLookupByLibrary.simpleMessage( - "Средние показатели давления:"), - "bodymass_chart": MessageLookupByLibrary.simpleMessage("График ИМТ"), - "by_default": MessageLookupByLibrary.simpleMessage("По умолчянию"), - "calories": MessageLookupByLibrary.simpleMessage("Калории"), - "carb_type": MessageLookupByLibrary.simpleMessage("Мучное"), - "carb_type_desc": MessageLookupByLibrary.simpleMessage( - "Если вы любите мучные продукты, но хотите придерживаться диеты, вам подходит диета с добавленим мучных блюд на основе цельнозерновых вариантов. В них больше сложных углеводов и клетчатки, что способствует длительному чувству сытости и поддерживает здоровье пищеварительной системы."), - "carbohydrates": MessageLookupByLibrary.simpleMessage("Углеводы"), - "chat": MessageLookupByLibrary.simpleMessage("Чат"), - "chest": MessageLookupByLibrary.simpleMessage("Грудь"), - "chest_circumference": - MessageLookupByLibrary.simpleMessage("Обхват груди"), - "choose_diet_duration": - MessageLookupByLibrary.simpleMessage("Выберите срок диеты"), - "choose_plan_duration": - MessageLookupByLibrary.simpleMessage("Выберите срок плана"), - "choose_start_diet_date": MessageLookupByLibrary.simpleMessage( - "Выберите дату старты диеты. Она отобразиться у Вас в дневнике"), - "circumference_empty": MessageLookupByLibrary.simpleMessage( - "Все замеры обязательны к заполнению"), - "circumference_is_not_a_number": MessageLookupByLibrary.simpleMessage( - "Все замеры должны быть числами"), - "circumferences_chart": - MessageLookupByLibrary.simpleMessage("График обхватов"), - "city": MessageLookupByLibrary.simpleMessage("Город"), - "city_of_living": - MessageLookupByLibrary.simpleMessage("Город проживания"), - "comfort": MessageLookupByLibrary.simpleMessage("Комфорт"), - "comment": MessageLookupByLibrary.simpleMessage("комментарий"), - "comments": MessageLookupByLibrary.simpleMessage("Комментарии"), - "comments_plural": MessageLookupByLibrary.simpleMessage("комментариев"), - "complain": MessageLookupByLibrary.simpleMessage("Пожаловаться"), - "continueButton": MessageLookupByLibrary.simpleMessage("Продолжить"), - "continue_": MessageLookupByLibrary.simpleMessage("Продолжить"), - "copied": MessageLookupByLibrary.simpleMessage("cкопирован"), - "copy_link": MessageLookupByLibrary.simpleMessage("Скопировать ссылку"), - "country": MessageLookupByLibrary.simpleMessage("Страна"), - "create_diet": MessageLookupByLibrary.simpleMessage("Создание диеты"), - "customer_price": - MessageLookupByLibrary.simpleMessage("Цена для покупателя"), - "date_of_birth": MessageLookupByLibrary.simpleMessage("Дата рождения"), - "day": MessageLookupByLibrary.simpleMessage("День"), - "days": MessageLookupByLibrary.simpleMessage("дней"), - "deleted": MessageLookupByLibrary.simpleMessage("Удалена"), - "diary": MessageLookupByLibrary.simpleMessage("Дневник"), - "diet": MessageLookupByLibrary.simpleMessage("Диета"), - "diet_author": MessageLookupByLibrary.simpleMessage("Автор диеты"), - "diet_plan": MessageLookupByLibrary.simpleMessage("План диеты"), - "diet_state": MessageLookupByLibrary.simpleMessage("Статус диеты"), - "diet_type": MessageLookupByLibrary.simpleMessage("Тип диеты"), - "do_you_have_hypertension_tendency": - MessageLookupByLibrary.simpleMessage("Есть ли у вас гипертония?"), - "do_you_have_hypotension_tendency": - MessageLookupByLibrary.simpleMessage("Есть ли у вас гипотония?"), - "do_you_take_pills": MessageLookupByLibrary.simpleMessage( - "Принимаете ли вы лекарства или бады?"), - "down_pressure": - MessageLookupByLibrary.simpleMessage("Нижние показатели давления:"), - "draft": MessageLookupByLibrary.simpleMessage("Черновик"), - "drafted": MessageLookupByLibrary.simpleMessage("Черновики"), - "eating_behavior": - MessageLookupByLibrary.simpleMessage("Пищевое поведение"), - "eating_behavior_type": MessageLookupByLibrary.simpleMessage( - "Формирование пищевого поведения"), - "eating_behavior_type_desc": MessageLookupByLibrary.simpleMessage( - "Формирование здорового пищевого поведения — это процесс, который включает в себя изменение привычек и отношения к еде. Он направлен на то, чтобы помочь людям научиться правильно питаться и поддерживать здоровый образ жизни.Основные принципы формирования здорового пищевого поведения: \n● Разнообразие продуктов; \n● Сбалансированный рацион; \n● Питьевой режим; \n● Ограничение вредных продуктов; \n● Регулярные приёмы пищи; \n● Умеренность;Осознанное питание; \n● Физическая активность;"), - "economy": MessageLookupByLibrary.simpleMessage("Эконом"), - "edit": MessageLookupByLibrary.simpleMessage("Редактировать"), - "email": MessageLookupByLibrary.simpleMessage("Элетронная почта"), - "email_empty": MessageLookupByLibrary.simpleMessage( - "Необходимо ввести адрес электронной почты"), - "email_invalid": MessageLookupByLibrary.simpleMessage( - "Некорректный адрес электронной почты"), - "enter_additional_information": MessageLookupByLibrary.simpleMessage( - "Введите любую дополнительную информацию на своё усмотрение:"), - "enter_diet_description": - MessageLookupByLibrary.simpleMessage("Введите описание диеты"), - "enter_diet_name": - MessageLookupByLibrary.simpleMessage("Выведите название диеты"), - "enter_information": - MessageLookupByLibrary.simpleMessage("Введите информацию..."), - "exit": MessageLookupByLibrary.simpleMessage("Выйти"), - "expand": MessageLookupByLibrary.simpleMessage("Показать полностью"), - "fats": MessageLookupByLibrary.simpleMessage("Жиры"), - "favorite_foods": - MessageLookupByLibrary.simpleMessage("Любимые продукты"), - "favorite_unfavorite_foods": MessageLookupByLibrary.simpleMessage( - "Ваши любимые/нелюбимые продукты питания?"), - "female": MessageLookupByLibrary.simpleMessage("Женский"), - "fill_in_information": - MessageLookupByLibrary.simpleMessage("Заполните информацию:"), - "finish": MessageLookupByLibrary.simpleMessage("Завершить"), - "first_name": MessageLookupByLibrary.simpleMessage("Имя"), - "first_name_empty": MessageLookupByLibrary.simpleMessage( - "Имя обязательно для заполнения"), - "first_name_short": MessageLookupByLibrary.simpleMessage( - "В имени должен быть минимум 1 символ"), - "fit_type": MessageLookupByLibrary.simpleMessage("Поддержание формы"), - "fit_type_desc": MessageLookupByLibrary.simpleMessage( - "План питания для поддержания формы сбалансированный и разнообразный, чтобы обеспечить организм всеми необходимыми питательными веществами. Общие принципы: \n● Дробное питание; \n● Разнообразие продуктов; \n● Контроль порций; \n● Питьевой режим; \n● Ограничение вредных продуктов;"), - "fitness": MessageLookupByLibrary.simpleMessage("Поддержка формы"), - "from": MessageLookupByLibrary.simpleMessage("от"), - "from_a_to_z": MessageLookupByLibrary.simpleMessage("Название: А-Я"), - "from_z_to_a": MessageLookupByLibrary.simpleMessage("Название: Я-А"), - "gallery": MessageLookupByLibrary.simpleMessage("Галерея"), - "general_info": - MessageLookupByLibrary.simpleMessage("Общая информация"), - "gr": MessageLookupByLibrary.simpleMessage("гр"), - "grams": MessageLookupByLibrary.simpleMessage("гр"), - "has_alergy": MessageLookupByLibrary.simpleMessage("Наличие аллергии"), - "has_hyper": - MessageLookupByLibrary.simpleMessage("Склонность к гипертонии"), - "has_hypo": - MessageLookupByLibrary.simpleMessage("Склонность к гипотонии"), - "height": MessageLookupByLibrary.simpleMessage("Рост"), - "height_measurements": - MessageLookupByLibrary.simpleMessage("Замер роста"), - "hide": MessageLookupByLibrary.simpleMessage("Свернуть"), - "hip_circumference": - MessageLookupByLibrary.simpleMessage("Обхват бедер"), - "hips": MessageLookupByLibrary.simpleMessage("Бедра"), - "in_progress": MessageLookupByLibrary.simpleMessage("В процессе"), - "inactive_diet_state": MessageLookupByLibrary.simpleMessage("Черновик"), - "initial_measurements": - MessageLookupByLibrary.simpleMessage("Первичные замеры"), - "label": MessageLookupByLibrary.simpleMessage("Название"), - "language": MessageLookupByLibrary.simpleMessage("Язык"), - "last_name": MessageLookupByLibrary.simpleMessage("Фамилия"), - "last_name_empty": MessageLookupByLibrary.simpleMessage( - "Фамилия обязательна для заполнения"), - "last_name_short": MessageLookupByLibrary.simpleMessage( - "В фамилии должен быть минимум 6 символов"), - "lbl_english": MessageLookupByLibrary.simpleMessage("English"), - "light_type": MessageLookupByLibrary.simpleMessage("Легкая"), - "light_type_desc": MessageLookupByLibrary.simpleMessage( - "С некоторыми видами диет можно употреблять алкоголь в умеренных количествах. Рекомендуется совмещать вместе с низкокалорийными закусками."), - "liked_groceries": - MessageLookupByLibrary.simpleMessage("Любимые продукты"), - "link_was_copied": - MessageLookupByLibrary.simpleMessage("Ссылка успешно скопирована"), - "loading": MessageLookupByLibrary.simpleMessage("Загрузка..."), - "lower": MessageLookupByLibrary.simpleMessage("Нижнее"), - "male": MessageLookupByLibrary.simpleMessage("Мужской"), - "meal": MessageLookupByLibrary.simpleMessage("Приём пищи"), - "meat": MessageLookupByLibrary.simpleMessage("Мясо"), - "meat_type": MessageLookupByLibrary.simpleMessage("С мясом"), - "meat_type_desc": MessageLookupByLibrary.simpleMessage( - "Диета с мясом полезная и сбалансированная. Включает в себя нежирное мясо: курицу, индейку, кролика или говядину. В сочетании с овощами получаете все необходимые витамины и минералы. Не забывайте о порциях и старайтесь есть медленно, прислушиваясь к своему организму."), - "milliliter": MessageLookupByLibrary.simpleMessage("мл"), - "minimal_customer_price": MessageLookupByLibrary.simpleMessage( - "Минимальная цена для покупателя: 1200₽"), - "most_new": MessageLookupByLibrary.simpleMessage("Самые новые"), - "most_old": MessageLookupByLibrary.simpleMessage("Самые старые"), - "msg_network_err": - MessageLookupByLibrary.simpleMessage("Сетевая ошибка!"), - "msg_something_went_wrong": - MessageLookupByLibrary.simpleMessage("Что то пошло не так!"), - "my_blog": MessageLookupByLibrary.simpleMessage("Мой блог"), - "my_diets": MessageLookupByLibrary.simpleMessage("Мои диеты"), - "my_plans": MessageLookupByLibrary.simpleMessage("Мои планы"), - "my_settings": MessageLookupByLibrary.simpleMessage("Мои настройки"), - "name_empty": MessageLookupByLibrary.simpleMessage( - "Имя пользователя обязательно для заполнения"), - "name_short": MessageLookupByLibrary.simpleMessage( - "В имени пользователя должно быть минимум 6 символов"), - "no": MessageLookupByLibrary.simpleMessage("Нет"), - "no_account": - MessageLookupByLibrary.simpleMessage("У меня нет аккаунта"), - "not_liked_groceries": - MessageLookupByLibrary.simpleMessage("Не любимые продукты"), - "one_option": MessageLookupByLibrary.simpleMessage("1 опция"), - "option": MessageLookupByLibrary.simpleMessage("Опция"), - "option_content": - MessageLookupByLibrary.simpleMessage("Содержание опции"), - "option_content_hint_text": - MessageLookupByLibrary.simpleMessage("На связи 7 дней в неделю"), - "option_desc": MessageLookupByLibrary.simpleMessage("Описание опции"), - "option_desc_hint_text": MessageLookupByLibrary.simpleMessage( - "Этот план питания для похудения на 7 дней сбалансированный и разнообразный"), - "option_duration": - MessageLookupByLibrary.simpleMessage("Продолжительность опции"), - "option_personal_diet_desc": MessageLookupByLibrary.simpleMessage( - "Опция подразумевает создание индивидуальной диеты"), - "option_title": MessageLookupByLibrary.simpleMessage("Заголовок опции"), - "order": MessageLookupByLibrary.simpleMessage("Порядок"), - "other_info": MessageLookupByLibrary.simpleMessage("Прочая информация"), - "password": MessageLookupByLibrary.simpleMessage("Пароль"), - "password_confirmation": - MessageLookupByLibrary.simpleMessage("Подтвердите пароль"), - "password_confirmation_mismatch": - MessageLookupByLibrary.simpleMessage("Пароли не совпадают"), - "password_empty": MessageLookupByLibrary.simpleMessage( - "Пароль обязателен для заполнения"), - "password_short": MessageLookupByLibrary.simpleMessage( - "В пароле должно быть минимум 6 символов"), - "pcs": MessageLookupByLibrary.simpleMessage("шт"), - "personal": MessageLookupByLibrary.simpleMessage("Персональные"), - "personal_diet_state": - MessageLookupByLibrary.simpleMessage("Персональная"), - "photo": MessageLookupByLibrary.simpleMessage("Фото"), - "physical_fitness": - MessageLookupByLibrary.simpleMessage("Физическая форма"), - "place_of_living": - MessageLookupByLibrary.simpleMessage("Место проживания"), - "plan_author": MessageLookupByLibrary.simpleMessage("Автор плана"), - "plan_desc": MessageLookupByLibrary.simpleMessage("Описание плана"), - "plan_desc_example": MessageLookupByLibrary.simpleMessage( - "Большое подробное, привлекательное описание плана"), - "plan_duration": MessageLookupByLibrary.simpleMessage("Срок плана"), - "plan_label_desc": - MessageLookupByLibrary.simpleMessage("План для поддержания формы"), - "plan_type": MessageLookupByLibrary.simpleMessage("Тип плана"), - "plans_complete": - MessageLookupByLibrary.simpleMessage("Пройденные планы"), - "popular": MessageLookupByLibrary.simpleMessage("Популярные"), - "preferred_language": - MessageLookupByLibrary.simpleMessage("Предпочитаемый язык общения"), - "pressure": MessageLookupByLibrary.simpleMessage("Давление"), - "pressure_empty": MessageLookupByLibrary.simpleMessage( - "Все показатели давления обязательны к заполнению"), - "pressure_is_not_a_number": MessageLookupByLibrary.simpleMessage( - "Все показатели давления должны быть числами"), - "preview": MessageLookupByLibrary.simpleMessage("Превью"), - "price": MessageLookupByLibrary.simpleMessage("Цена"), - "price_explanation": MessageLookupByLibrary.simpleMessage( - "Разница в ценах, это комиссия Итвио"), - "profile": MessageLookupByLibrary.simpleMessage("Профиль"), - "proteins": MessageLookupByLibrary.simpleMessage("Белки"), - "publish": MessageLookupByLibrary.simpleMessage("Опубликовать"), - "published": MessageLookupByLibrary.simpleMessage("Опубликованные"), - "removeFromActive": - MessageLookupByLibrary.simpleMessage("Снять с публикации"), - "save": MessageLookupByLibrary.simpleMessage("Сохранить"), - "services": MessageLookupByLibrary.simpleMessage("Оказание услуг"), - "settings": MessageLookupByLibrary.simpleMessage("Настройки"), - "sex": MessageLookupByLibrary.simpleMessage("Пол"), - "share": MessageLookupByLibrary.simpleMessage("Поделиться"), - "skip": MessageLookupByLibrary.simpleMessage("Пропустить"), - "slim": MessageLookupByLibrary.simpleMessage("Похудение"), - "slim_type": MessageLookupByLibrary.simpleMessage("Похудение"), - "slim_type_desc": MessageLookupByLibrary.simpleMessage( - "План питания для похудения должен быть разработан с учётом индивидуальных особенностей организма, возраста, пола, уровня физической активности и состояния здоровья. Общие принципы: \n● Снижение калорийности; \n● Сбалансированный рацион; \n● Разнообразие продуктов; \n● Питьевой режим; \n● Ограничение вредных продуктов;"), - "sport_hobbies": - MessageLookupByLibrary.simpleMessage("Спортивные увлечения"), - "standard": MessageLookupByLibrary.simpleMessage("Стандарт"), - "startDiet": MessageLookupByLibrary.simpleMessage("Начать диету"), - "takes_pills": - MessageLookupByLibrary.simpleMessage("Принимает лекарства"), - "tell_your_schedule": MessageLookupByLibrary.simpleMessage( - "Расскажите в свободной форме о том как просыпаетесь, когда едите, когда ложитесь спать:"), - "three_options": MessageLookupByLibrary.simpleMessage("3 опции"), - "time": MessageLookupByLibrary.simpleMessage("Время прохождения"), - "toOffer": MessageLookupByLibrary.simpleMessage("Предложить"), - "to_draft": MessageLookupByLibrary.simpleMessage("В черновик"), - "unfavorite_foods": - MessageLookupByLibrary.simpleMessage("Нелюбимые продукты"), - "up_pressure": MessageLookupByLibrary.simpleMessage( - "Верхние показатели давления:"), - "upper": MessageLookupByLibrary.simpleMessage("Верхнее"), - "user_authorization": - MessageLookupByLibrary.simpleMessage("Аутентификация"), - "user_data": - MessageLookupByLibrary.simpleMessage("Данные пользователя"), - "user_registration": - MessageLookupByLibrary.simpleMessage("Регистрация пользователя"), - "username": MessageLookupByLibrary.simpleMessage("Имя пользователя"), - "vegan": MessageLookupByLibrary.simpleMessage("Веган."), - "vegan_type": MessageLookupByLibrary.simpleMessage("Вегетарианская"), - "vegan_type_desc": MessageLookupByLibrary.simpleMessage( - "Диета основана на потреблении растительной пищи и отказе от продуктов животного происхождения. Такой тип питания может быть разнообразным и вкусным, а также полезным для здоровья."), - "waist": MessageLookupByLibrary.simpleMessage("Талия"), - "waist_circumference": - MessageLookupByLibrary.simpleMessage("Обхват талии"), - "weight": MessageLookupByLibrary.simpleMessage("Вес"), - "weight_chart": MessageLookupByLibrary.simpleMessage("График веса"), - "weight_measurements": - MessageLookupByLibrary.simpleMessage("Замер веса"), - "wellness": - MessageLookupByLibrary.simpleMessage("Улучшение самочувствия"), - "wellness_type": - MessageLookupByLibrary.simpleMessage("Улучшение самочувствия"), - "wellness_type_desc": MessageLookupByLibrary.simpleMessage( - "Если вы любите мучные продукты, но хотите придерживаться диеты, вам подходит диета с добавленим мучных блюд на основе цельнозерновых вариантов. В них больше сложных углеводов и клетчатки, что способствует длительному чувству сытости и поддерживает здоровье пищеварительной системы."), - "what_is_your_name": - MessageLookupByLibrary.simpleMessage("Как вас зовут?"), - "wrong_credentials": MessageLookupByLibrary.simpleMessage( - "Неверные данные пользователя"), - "you_will_get": MessageLookupByLibrary.simpleMessage("Вы получите"), - "your_blood_pressure": - MessageLookupByLibrary.simpleMessage("Ваше артериальное давление?"), - "your_favorite_sports": - MessageLookupByLibrary.simpleMessage("Ваши спортивные увлечения?"), - "your_gender": MessageLookupByLibrary.simpleMessage("Ваш пол?"), - "your_height": MessageLookupByLibrary.simpleMessage("Ваш рост:"), - "your_schedule": MessageLookupByLibrary.simpleMessage("Ваш режим дня?"), - "your_weight": MessageLookupByLibrary.simpleMessage("Ваш вес:") - }; + "Moscow": MessageLookupByLibrary.simpleMessage("Москва"), + "Russia": MessageLookupByLibrary.simpleMessage("Россия"), + "about_diet": MessageLookupByLibrary.simpleMessage("Об этой диете"), + "about_plan": MessageLookupByLibrary.simpleMessage("Об этом плане"), + "active": MessageLookupByLibrary.simpleMessage("Активен"), + "active_diet_state": MessageLookupByLibrary.simpleMessage("Активная"), + "add": MessageLookupByLibrary.simpleMessage("Добавить"), + "add_cover": MessageLookupByLibrary.simpleMessage("Добавьте обложку"), + "add_measure": MessageLookupByLibrary.simpleMessage("Добавить замер"), + "adding_plan": MessageLookupByLibrary.simpleMessage("Добавление плана"), + "additional_information": MessageLookupByLibrary.simpleMessage( + "Дополнительная информация", + ), + "admin": MessageLookupByLibrary.simpleMessage("Админ"), + "all": MessageLookupByLibrary.simpleMessage("Все"), + "allergies_presence": MessageLookupByLibrary.simpleMessage( + "Наличие аллергии", + ), + "another_form_of_comment": MessageLookupByLibrary.simpleMessage( + "комментария", + ), + "another_form_of_day": MessageLookupByLibrary.simpleMessage("дня"), + "answer": MessageLookupByLibrary.simpleMessage("Ответить"), + "archived": MessageLookupByLibrary.simpleMessage("В архиве"), + "authentificate": MessageLookupByLibrary.simpleMessage("Войти"), + "average_pressure": MessageLookupByLibrary.simpleMessage( + "Средние показатели давления:", + ), + "bodymass_chart": MessageLookupByLibrary.simpleMessage("График ИМТ"), + "by_default": MessageLookupByLibrary.simpleMessage("По умолчянию"), + "calories": MessageLookupByLibrary.simpleMessage("Калории"), + "carb_type": MessageLookupByLibrary.simpleMessage("Мучное"), + "carb_type_desc": MessageLookupByLibrary.simpleMessage( + "Если вы любите мучные продукты, но хотите придерживаться диеты, вам подходит диета с добавленим мучных блюд на основе цельнозерновых вариантов. В них больше сложных углеводов и клетчатки, что способствует длительному чувству сытости и поддерживает здоровье пищеварительной системы.", + ), + "carbohydrates": MessageLookupByLibrary.simpleMessage("Углеводы"), + "chat": MessageLookupByLibrary.simpleMessage("Чат"), + "chest": MessageLookupByLibrary.simpleMessage("Грудь"), + "chest_circumference": MessageLookupByLibrary.simpleMessage("Обхват груди"), + "choose_diet_duration": MessageLookupByLibrary.simpleMessage( + "Выберите срок диеты", + ), + "choose_plan_duration": MessageLookupByLibrary.simpleMessage( + "Выберите срок плана", + ), + "choose_start_diet_date": MessageLookupByLibrary.simpleMessage( + "Выберите дату старты диеты. Она отобразиться у Вас в дневнике", + ), + "circumference_empty": MessageLookupByLibrary.simpleMessage( + "Все замеры обязательны к заполнению", + ), + "circumference_is_not_a_number": MessageLookupByLibrary.simpleMessage( + "Все замеры должны быть числами", + ), + "circumferences_chart": MessageLookupByLibrary.simpleMessage( + "График обхватов", + ), + "city": MessageLookupByLibrary.simpleMessage("Город"), + "city_of_living": MessageLookupByLibrary.simpleMessage("Город проживания"), + "comfort": MessageLookupByLibrary.simpleMessage("Комфорт"), + "comment": MessageLookupByLibrary.simpleMessage("комментарий"), + "comments": MessageLookupByLibrary.simpleMessage("Комментарии"), + "comments_plural": MessageLookupByLibrary.simpleMessage("комментариев"), + "complain": MessageLookupByLibrary.simpleMessage("Пожаловаться"), + "continueButton": MessageLookupByLibrary.simpleMessage("Продолжить"), + "continue_": MessageLookupByLibrary.simpleMessage("Продолжить"), + "copied": MessageLookupByLibrary.simpleMessage("cкопирован"), + "copy_link": MessageLookupByLibrary.simpleMessage("Скопировать ссылку"), + "country": MessageLookupByLibrary.simpleMessage("Страна"), + "create_diet": MessageLookupByLibrary.simpleMessage("Создание диеты"), + "customer_price": MessageLookupByLibrary.simpleMessage( + "Цена для покупателя", + ), + "date_of_birth": MessageLookupByLibrary.simpleMessage("Дата рождения"), + "day": MessageLookupByLibrary.simpleMessage("День"), + "days": MessageLookupByLibrary.simpleMessage("дней"), + "deleted": MessageLookupByLibrary.simpleMessage("Удалена"), + "diary": MessageLookupByLibrary.simpleMessage("Дневник"), + "diet": MessageLookupByLibrary.simpleMessage("Диета"), + "diet_author": MessageLookupByLibrary.simpleMessage("Автор диеты"), + "diet_plan": MessageLookupByLibrary.simpleMessage("План диеты"), + "diet_state": MessageLookupByLibrary.simpleMessage("Статус диеты"), + "diet_type": MessageLookupByLibrary.simpleMessage("Тип диеты"), + "do_you_have_hypertension_tendency": MessageLookupByLibrary.simpleMessage( + "Есть ли у вас гипертония?", + ), + "do_you_have_hypotension_tendency": MessageLookupByLibrary.simpleMessage( + "Есть ли у вас гипотония?", + ), + "do_you_take_pills": MessageLookupByLibrary.simpleMessage( + "Принимаете ли вы лекарства или бады?", + ), + "down_pressure": MessageLookupByLibrary.simpleMessage( + "Нижние показатели давления:", + ), + "draft": MessageLookupByLibrary.simpleMessage("Черновик"), + "drafted": MessageLookupByLibrary.simpleMessage("Черновики"), + "eating_behavior": MessageLookupByLibrary.simpleMessage( + "Пищевое поведение", + ), + "eating_behavior_type": MessageLookupByLibrary.simpleMessage( + "Формирование пищевого поведения", + ), + "eating_behavior_type_desc": MessageLookupByLibrary.simpleMessage( + "Формирование здорового пищевого поведения — это процесс, который включает в себя изменение привычек и отношения к еде. Он направлен на то, чтобы помочь людям научиться правильно питаться и поддерживать здоровый образ жизни.Основные принципы формирования здорового пищевого поведения: \n● Разнообразие продуктов; \n● Сбалансированный рацион; \n● Питьевой режим; \n● Ограничение вредных продуктов; \n● Регулярные приёмы пищи; \n● Умеренность;Осознанное питание; \n● Физическая активность;", + ), + "economy": MessageLookupByLibrary.simpleMessage("Эконом"), + "edit": MessageLookupByLibrary.simpleMessage("Редактировать"), + "email": MessageLookupByLibrary.simpleMessage("Электронная почта"), + "email_empty": MessageLookupByLibrary.simpleMessage( + "Необходимо ввести адрес электронной почты", + ), + "email_invalid": MessageLookupByLibrary.simpleMessage( + "Некорректный адрес электронной почты", + ), + "enter_additional_information": MessageLookupByLibrary.simpleMessage( + "Введите любую дополнительную информацию на своё усмотрение:", + ), + "enter_diet_description": MessageLookupByLibrary.simpleMessage( + "Введите описание диеты", + ), + "enter_diet_name": MessageLookupByLibrary.simpleMessage( + "Выведите название диеты", + ), + "enter_information": MessageLookupByLibrary.simpleMessage( + "Введите информацию...", + ), + "exit": MessageLookupByLibrary.simpleMessage("Выйти"), + "expand": MessageLookupByLibrary.simpleMessage("Показать полностью"), + "fats": MessageLookupByLibrary.simpleMessage("Жиры"), + "favorite_foods": MessageLookupByLibrary.simpleMessage("Любимые продукты"), + "favorite_unfavorite_foods": MessageLookupByLibrary.simpleMessage( + "Ваши любимые/нелюбимые продукты питания?", + ), + "female": MessageLookupByLibrary.simpleMessage("Женский"), + "fill_in_information": MessageLookupByLibrary.simpleMessage( + "Заполните информацию:", + ), + "finish": MessageLookupByLibrary.simpleMessage("Завершить"), + "first_name": MessageLookupByLibrary.simpleMessage("Имя"), + "first_name_empty": MessageLookupByLibrary.simpleMessage( + "Имя обязательно для заполнения", + ), + "first_name_short": MessageLookupByLibrary.simpleMessage( + "В имени должен быть минимум 1 символ", + ), + "fit_type": MessageLookupByLibrary.simpleMessage("Поддержание формы"), + "fit_type_desc": MessageLookupByLibrary.simpleMessage( + "План питания для поддержания формы сбалансированный и разнообразный, чтобы обеспечить организм всеми необходимыми питательными веществами. Общие принципы: \n● Дробное питание; \n● Разнообразие продуктов; \n● Контроль порций; \n● Питьевой режим; \n● Ограничение вредных продуктов;", + ), + "fitness": MessageLookupByLibrary.simpleMessage("Поддержка формы"), + "from": MessageLookupByLibrary.simpleMessage("от"), + "from_a_to_z": MessageLookupByLibrary.simpleMessage("Название: А-Я"), + "from_z_to_a": MessageLookupByLibrary.simpleMessage("Название: Я-А"), + "gallery": MessageLookupByLibrary.simpleMessage("Галерея"), + "general_info": MessageLookupByLibrary.simpleMessage("Общая информация"), + "gr": MessageLookupByLibrary.simpleMessage("гр"), + "grams": MessageLookupByLibrary.simpleMessage("гр"), + "has_alergy": MessageLookupByLibrary.simpleMessage("Наличие аллергии"), + "has_hyper": MessageLookupByLibrary.simpleMessage( + "Склонность к гипертонии", + ), + "has_hypo": MessageLookupByLibrary.simpleMessage("Склонность к гипотонии"), + "height": MessageLookupByLibrary.simpleMessage("Рост"), + "height_measurements": MessageLookupByLibrary.simpleMessage("Замер роста"), + "hide": MessageLookupByLibrary.simpleMessage("Свернуть"), + "hip_circumference": MessageLookupByLibrary.simpleMessage("Обхват бедер"), + "hips": MessageLookupByLibrary.simpleMessage("Бедра"), + "in_progress": MessageLookupByLibrary.simpleMessage("В процессе"), + "inactive_diet_state": MessageLookupByLibrary.simpleMessage("Черновик"), + "initial_measurements": MessageLookupByLibrary.simpleMessage( + "Первичные замеры", + ), + "label": MessageLookupByLibrary.simpleMessage("Название"), + "language": MessageLookupByLibrary.simpleMessage("Язык"), + "last_name": MessageLookupByLibrary.simpleMessage("Фамилия"), + "last_name_empty": MessageLookupByLibrary.simpleMessage( + "Фамилия обязательна для заполнения", + ), + "last_name_short": MessageLookupByLibrary.simpleMessage( + "В фамилии должен быть минимум 6 символов", + ), + "lbl_english": MessageLookupByLibrary.simpleMessage("English"), + "light_type": MessageLookupByLibrary.simpleMessage("Легкая"), + "light_type_desc": MessageLookupByLibrary.simpleMessage( + "С некоторыми видами диет можно употреблять алкоголь в умеренных количествах. Рекомендуется совмещать вместе с низкокалорийными закусками.", + ), + "liked_groceries": MessageLookupByLibrary.simpleMessage("Любимые продукты"), + "link_was_copied": MessageLookupByLibrary.simpleMessage( + "Ссылка успешно скопирована", + ), + "loading": MessageLookupByLibrary.simpleMessage("Загрузка..."), + "lower": MessageLookupByLibrary.simpleMessage("Нижнее"), + "male": MessageLookupByLibrary.simpleMessage("Мужской"), + "meal": MessageLookupByLibrary.simpleMessage("Приём пищи"), + "meat": MessageLookupByLibrary.simpleMessage("Мясо"), + "meat_type": MessageLookupByLibrary.simpleMessage("С мясом"), + "meat_type_desc": MessageLookupByLibrary.simpleMessage( + "Диета с мясом полезная и сбалансированная. Включает в себя нежирное мясо: курицу, индейку, кролика или говядину. В сочетании с овощами получаете все необходимые витамины и минералы. Не забывайте о порциях и старайтесь есть медленно, прислушиваясь к своему организму.", + ), + "milliliter": MessageLookupByLibrary.simpleMessage("мл"), + "minimal_customer_price": MessageLookupByLibrary.simpleMessage( + "Минимальная цена для покупателя: 1200₽", + ), + "most_new": MessageLookupByLibrary.simpleMessage("Самые новые"), + "most_old": MessageLookupByLibrary.simpleMessage("Самые старые"), + "msg_network_err": MessageLookupByLibrary.simpleMessage("Сетевая ошибка!"), + "msg_something_went_wrong": MessageLookupByLibrary.simpleMessage( + "Что то пошло не так!", + ), + "my_blog": MessageLookupByLibrary.simpleMessage("Мой блог"), + "my_diets": MessageLookupByLibrary.simpleMessage("Мои диеты"), + "my_plans": MessageLookupByLibrary.simpleMessage("Мои планы"), + "my_settings": MessageLookupByLibrary.simpleMessage("Мои настройки"), + "name_empty": MessageLookupByLibrary.simpleMessage( + "Имя пользователя обязательно для заполнения", + ), + "name_short": MessageLookupByLibrary.simpleMessage( + "В имени пользователя должно быть минимум 6 символов", + ), + "no": MessageLookupByLibrary.simpleMessage("Нет"), + "no_account": MessageLookupByLibrary.simpleMessage("У меня нет аккаунта"), + "not_liked_groceries": MessageLookupByLibrary.simpleMessage( + "Не любимые продукты", + ), + "one_option": MessageLookupByLibrary.simpleMessage("1 опция"), + "option": MessageLookupByLibrary.simpleMessage("Опция"), + "option_content": MessageLookupByLibrary.simpleMessage("Содержание опции"), + "option_content_hint_text": MessageLookupByLibrary.simpleMessage( + "На связи 7 дней в неделю", + ), + "option_desc": MessageLookupByLibrary.simpleMessage("Описание опции"), + "option_desc_hint_text": MessageLookupByLibrary.simpleMessage( + "Этот план питания для похудения на 7 дней сбалансированный и разнообразный", + ), + "option_duration": MessageLookupByLibrary.simpleMessage( + "Продолжительность опции", + ), + "option_personal_diet_desc": MessageLookupByLibrary.simpleMessage( + "Опция подразумевает создание индивидуальной диеты", + ), + "option_title": MessageLookupByLibrary.simpleMessage("Заголовок опции"), + "order": MessageLookupByLibrary.simpleMessage("Порядок"), + "other_info": MessageLookupByLibrary.simpleMessage("Прочая информация"), + "password": MessageLookupByLibrary.simpleMessage("Пароль"), + "password_confirmation": MessageLookupByLibrary.simpleMessage( + "Подтвердите пароль", + ), + "password_confirmation_mismatch": MessageLookupByLibrary.simpleMessage( + "Пароли не совпадают", + ), + "password_empty": MessageLookupByLibrary.simpleMessage( + "Пароль обязателен для заполнения", + ), + "password_short": MessageLookupByLibrary.simpleMessage( + "В пароле должно быть минимум 6 символов", + ), + "pcs": MessageLookupByLibrary.simpleMessage("шт"), + "personal": MessageLookupByLibrary.simpleMessage("Персональные"), + "personal_diet_state": MessageLookupByLibrary.simpleMessage("Персональная"), + "photo": MessageLookupByLibrary.simpleMessage("Фото"), + "physical_fitness": MessageLookupByLibrary.simpleMessage( + "Физическая форма", + ), + "place_of_living": MessageLookupByLibrary.simpleMessage("Место проживания"), + "plan_author": MessageLookupByLibrary.simpleMessage("Автор плана"), + "plan_desc": MessageLookupByLibrary.simpleMessage("Описание плана"), + "plan_desc_example": MessageLookupByLibrary.simpleMessage( + "Большое подробное, привлекательное описание плана", + ), + "plan_duration": MessageLookupByLibrary.simpleMessage("Срок плана"), + "plan_label_desc": MessageLookupByLibrary.simpleMessage( + "План для поддержания формы", + ), + "plan_type": MessageLookupByLibrary.simpleMessage("Тип плана"), + "plans_complete": MessageLookupByLibrary.simpleMessage("Пройденные планы"), + "popular": MessageLookupByLibrary.simpleMessage("Популярные"), + "preferred_language": MessageLookupByLibrary.simpleMessage( + "Предпочитаемый язык общения", + ), + "pressure": MessageLookupByLibrary.simpleMessage("Давление"), + "pressure_empty": MessageLookupByLibrary.simpleMessage( + "Все показатели давления обязательны к заполнению", + ), + "pressure_is_not_a_number": MessageLookupByLibrary.simpleMessage( + "Все показатели давления должны быть числами", + ), + "preview": MessageLookupByLibrary.simpleMessage("Превью"), + "price": MessageLookupByLibrary.simpleMessage("Цена"), + "price_explanation": MessageLookupByLibrary.simpleMessage( + "Разница в ценах, это комиссия Итвио", + ), + "profile": MessageLookupByLibrary.simpleMessage("Профиль"), + "proteins": MessageLookupByLibrary.simpleMessage("Белки"), + "publish": MessageLookupByLibrary.simpleMessage("Опубликовать"), + "published": MessageLookupByLibrary.simpleMessage("Опубликованные"), + "removeFromActive": MessageLookupByLibrary.simpleMessage( + "Снять с публикации", + ), + "save": MessageLookupByLibrary.simpleMessage("Сохранить"), + "services": MessageLookupByLibrary.simpleMessage("Оказание услуг"), + "settings": MessageLookupByLibrary.simpleMessage("Настройки"), + "sex": MessageLookupByLibrary.simpleMessage("Пол"), + "share": MessageLookupByLibrary.simpleMessage("Поделиться"), + "skip": MessageLookupByLibrary.simpleMessage("Пропустить"), + "slim": MessageLookupByLibrary.simpleMessage("Похудение"), + "slim_type": MessageLookupByLibrary.simpleMessage("Похудение"), + "slim_type_desc": MessageLookupByLibrary.simpleMessage( + "План питания для похудения должен быть разработан с учётом индивидуальных особенностей организма, возраста, пола, уровня физической активности и состояния здоровья. Общие принципы: \n● Снижение калорийности; \n● Сбалансированный рацион; \n● Разнообразие продуктов; \n● Питьевой режим; \n● Ограничение вредных продуктов;", + ), + "sport_hobbies": MessageLookupByLibrary.simpleMessage( + "Спортивные увлечения", + ), + "standard": MessageLookupByLibrary.simpleMessage("Стандарт"), + "startDiet": MessageLookupByLibrary.simpleMessage("Начать диету"), + "takes_pills": MessageLookupByLibrary.simpleMessage("Принимает лекарства"), + "tell_your_schedule": MessageLookupByLibrary.simpleMessage( + "Расскажите в свободной форме о том как просыпаетесь, когда едите, когда ложитесь спать:", + ), + "three_options": MessageLookupByLibrary.simpleMessage("3 опции"), + "time": MessageLookupByLibrary.simpleMessage("Время прохождения"), + "toOffer": MessageLookupByLibrary.simpleMessage("Предложить"), + "to_draft": MessageLookupByLibrary.simpleMessage("В черновик"), + "unfavorite_foods": MessageLookupByLibrary.simpleMessage( + "Нелюбимые продукты", + ), + "up_pressure": MessageLookupByLibrary.simpleMessage( + "Верхние показатели давления:", + ), + "upper": MessageLookupByLibrary.simpleMessage("Верхнее"), + "user_authorization": MessageLookupByLibrary.simpleMessage( + "Аутентификация", + ), + "user_data": MessageLookupByLibrary.simpleMessage("Данные пользователя"), + "user_registration": MessageLookupByLibrary.simpleMessage( + "Регистрация пользователя", + ), + "username": MessageLookupByLibrary.simpleMessage("Имя пользователя"), + "vegan": MessageLookupByLibrary.simpleMessage("Веган."), + "vegan_type": MessageLookupByLibrary.simpleMessage("Вегетарианская"), + "vegan_type_desc": MessageLookupByLibrary.simpleMessage( + "Диета основана на потреблении растительной пищи и отказе от продуктов животного происхождения. Такой тип питания может быть разнообразным и вкусным, а также полезным для здоровья.", + ), + "waist": MessageLookupByLibrary.simpleMessage("Талия"), + "waist_circumference": MessageLookupByLibrary.simpleMessage("Обхват талии"), + "weight": MessageLookupByLibrary.simpleMessage("Вес"), + "weight_chart": MessageLookupByLibrary.simpleMessage("График веса"), + "weight_measurements": MessageLookupByLibrary.simpleMessage("Замер веса"), + "wellness": MessageLookupByLibrary.simpleMessage("Улучшение самочувствия"), + "wellness_type": MessageLookupByLibrary.simpleMessage( + "Улучшение самочувствия", + ), + "wellness_type_desc": MessageLookupByLibrary.simpleMessage( + "Если вы любите мучные продукты, но хотите придерживаться диеты, вам подходит диета с добавленим мучных блюд на основе цельнозерновых вариантов. В них больше сложных углеводов и клетчатки, что способствует длительному чувству сытости и поддерживает здоровье пищеварительной системы.", + ), + "what_is_your_name": MessageLookupByLibrary.simpleMessage("Как вас зовут?"), + "wrong_credentials": MessageLookupByLibrary.simpleMessage( + "Неверные данные пользователя", + ), + "you_will_get": MessageLookupByLibrary.simpleMessage("Вы получите"), + "your_blood_pressure": MessageLookupByLibrary.simpleMessage( + "Ваше артериальное давление?", + ), + "your_favorite_sports": MessageLookupByLibrary.simpleMessage( + "Ваши спортивные увлечения?", + ), + "your_gender": MessageLookupByLibrary.simpleMessage("Ваш пол?"), + "your_height": MessageLookupByLibrary.simpleMessage("Ваш рост:"), + "your_schedule": MessageLookupByLibrary.simpleMessage("Ваш режим дня?"), + "your_weight": MessageLookupByLibrary.simpleMessage("Ваш вес:"), + }; } diff --git a/lib/generated/intl/messages_ru.dart b/lib/generated/intl/messages_ru.dart index 328f6779..1d41b34b 100644 --- a/lib/generated/intl/messages_ru.dart +++ b/lib/generated/intl/messages_ru.dart @@ -22,299 +22,350 @@ class MessageLookup extends MessageLookupByLibrary { final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { - "Moscow": MessageLookupByLibrary.simpleMessage("Москва"), - "Russia": MessageLookupByLibrary.simpleMessage("Россия"), - "about_diet": MessageLookupByLibrary.simpleMessage("Об этой диете"), - "about_plan": MessageLookupByLibrary.simpleMessage("Об этом плане"), - "active": MessageLookupByLibrary.simpleMessage("Активен"), - "active_diet_state": MessageLookupByLibrary.simpleMessage("Активная"), - "add": MessageLookupByLibrary.simpleMessage("Добавить"), - "add_cover": MessageLookupByLibrary.simpleMessage("Добавьте обложку"), - "add_measure": MessageLookupByLibrary.simpleMessage("Добавить замер"), - "adding_plan": MessageLookupByLibrary.simpleMessage("Добавление плана"), - "additional_information": - MessageLookupByLibrary.simpleMessage("Дополнительная информация"), - "admin": MessageLookupByLibrary.simpleMessage("Админ"), - "all": MessageLookupByLibrary.simpleMessage("Все"), - "allergies_presence": - MessageLookupByLibrary.simpleMessage("Наличие аллергии"), - "another_form_of_comment": - MessageLookupByLibrary.simpleMessage("комментария"), - "another_form_of_day": MessageLookupByLibrary.simpleMessage("дня"), - "answer": MessageLookupByLibrary.simpleMessage("Ответить"), - "archived": MessageLookupByLibrary.simpleMessage("В архиве"), - "authentificate": MessageLookupByLibrary.simpleMessage("Войти"), - "average_pressure": MessageLookupByLibrary.simpleMessage( - "Средние показатели давления:"), - "bodymass_chart": MessageLookupByLibrary.simpleMessage("График ИМТ"), - "by_default": MessageLookupByLibrary.simpleMessage("По умолчянию"), - "calories": MessageLookupByLibrary.simpleMessage("Калории"), - "carb_type": MessageLookupByLibrary.simpleMessage("Мучное"), - "carb_type_desc": MessageLookupByLibrary.simpleMessage( - "Если вы любите мучные продукты, но хотите придерживаться диеты, вам подходит диета с добавленим мучных блюд на основе цельнозерновых вариантов. В них больше сложных углеводов и клетчатки, что способствует длительному чувству сытости и поддерживает здоровье пищеварительной системы."), - "carbohydrates": MessageLookupByLibrary.simpleMessage("Углеводы"), - "chat": MessageLookupByLibrary.simpleMessage("Чат"), - "chest": MessageLookupByLibrary.simpleMessage("Грудь"), - "chest_circumference": - MessageLookupByLibrary.simpleMessage("Обхват груди"), - "choose_diet_duration": - MessageLookupByLibrary.simpleMessage("Выберите срок диеты"), - "choose_plan_duration": - MessageLookupByLibrary.simpleMessage("Выберите срок плана"), - "choose_start_diet_date": MessageLookupByLibrary.simpleMessage( - "Выберите дату старты диеты. Она отобразиться у Вас в дневнике"), - "circumference_empty": MessageLookupByLibrary.simpleMessage( - "Все замеры обязательны к заполнению"), - "circumference_is_not_a_number": MessageLookupByLibrary.simpleMessage( - "Все замеры должны быть числами"), - "circumferences_chart": - MessageLookupByLibrary.simpleMessage("График обхватов"), - "city": MessageLookupByLibrary.simpleMessage("Город"), - "city_of_living": - MessageLookupByLibrary.simpleMessage("Город проживания"), - "comfort": MessageLookupByLibrary.simpleMessage("Комфорт"), - "comment": MessageLookupByLibrary.simpleMessage("комментарий"), - "comments": MessageLookupByLibrary.simpleMessage("Комментарии"), - "comments_plural": MessageLookupByLibrary.simpleMessage("комментариев"), - "complain": MessageLookupByLibrary.simpleMessage("Пожаловаться"), - "continueButton": MessageLookupByLibrary.simpleMessage("Продолжить"), - "continue_": MessageLookupByLibrary.simpleMessage("Продолжить"), - "copied": MessageLookupByLibrary.simpleMessage("cкопирован"), - "copy_link": MessageLookupByLibrary.simpleMessage("Скопировать ссылку"), - "country": MessageLookupByLibrary.simpleMessage("Страна"), - "create_diet": MessageLookupByLibrary.simpleMessage("Создание диеты"), - "customer_price": - MessageLookupByLibrary.simpleMessage("Цена для покупателя"), - "date_of_birth": MessageLookupByLibrary.simpleMessage("Дата рождения"), - "day": MessageLookupByLibrary.simpleMessage("День"), - "days": MessageLookupByLibrary.simpleMessage("дней"), - "deleted": MessageLookupByLibrary.simpleMessage("Удалена"), - "diary": MessageLookupByLibrary.simpleMessage("Дневник"), - "diet": MessageLookupByLibrary.simpleMessage("Диета"), - "diet_author": MessageLookupByLibrary.simpleMessage("Автор диеты"), - "diet_plan": MessageLookupByLibrary.simpleMessage("План диеты"), - "diet_state": MessageLookupByLibrary.simpleMessage("Статус диеты"), - "diet_type": MessageLookupByLibrary.simpleMessage("Тип диеты"), - "do_you_have_hypertension_tendency": - MessageLookupByLibrary.simpleMessage("Есть ли у вас гипертония?"), - "do_you_have_hypotension_tendency": - MessageLookupByLibrary.simpleMessage("Есть ли у вас гипотония?"), - "do_you_take_pills": MessageLookupByLibrary.simpleMessage( - "Принимаете ли вы лекарства или бады?"), - "down_pressure": - MessageLookupByLibrary.simpleMessage("Нижние показатели давления:"), - "draft": MessageLookupByLibrary.simpleMessage("Черновик"), - "drafted": MessageLookupByLibrary.simpleMessage("Черновики"), - "eating_behavior": - MessageLookupByLibrary.simpleMessage("Пищевое поведение"), - "eating_behavior_type": MessageLookupByLibrary.simpleMessage( - "Формирование пищевого поведения"), - "eating_behavior_type_desc": MessageLookupByLibrary.simpleMessage( - "Формирование здорового пищевого поведения — это процесс, который включает в себя изменение привычек и отношения к еде. Он направлен на то, чтобы помочь людям научиться правильно питаться и поддерживать здоровый образ жизни.Основные принципы формирования здорового пищевого поведения: \n● Разнообразие продуктов; \n● Сбалансированный рацион; \n● Питьевой режим; \n● Ограничение вредных продуктов; \n● Регулярные приёмы пищи; \n● Умеренность;Осознанное питание; \n● Физическая активность;"), - "economy": MessageLookupByLibrary.simpleMessage("Эконом"), - "edit": MessageLookupByLibrary.simpleMessage("Редактировать"), - "email": MessageLookupByLibrary.simpleMessage("Элетронная почта"), - "email_empty": MessageLookupByLibrary.simpleMessage( - "Необходимо ввести адрес электронной почты"), - "email_invalid": MessageLookupByLibrary.simpleMessage( - "Некорректный адрес электронной почты"), - "enter_additional_information": MessageLookupByLibrary.simpleMessage( - "Введите любую дополнительную информацию на своё усмотрение:"), - "enter_diet_description": - MessageLookupByLibrary.simpleMessage("Введите описание диеты"), - "enter_diet_name": - MessageLookupByLibrary.simpleMessage("Выведите название диеты"), - "enter_information": - MessageLookupByLibrary.simpleMessage("Введите информацию..."), - "exit": MessageLookupByLibrary.simpleMessage("Выйти"), - "expand": MessageLookupByLibrary.simpleMessage("Показать полностью"), - "fats": MessageLookupByLibrary.simpleMessage("Жиры"), - "favorite_foods": - MessageLookupByLibrary.simpleMessage("Любимые продукты"), - "favorite_unfavorite_foods": MessageLookupByLibrary.simpleMessage( - "Ваши любимые/нелюбимые продукты питания?"), - "female": MessageLookupByLibrary.simpleMessage("Женский"), - "fill_in_information": - MessageLookupByLibrary.simpleMessage("Заполните информацию:"), - "finish": MessageLookupByLibrary.simpleMessage("Завершить"), - "first_name": MessageLookupByLibrary.simpleMessage("Имя"), - "first_name_empty": MessageLookupByLibrary.simpleMessage( - "Имя обязательно для заполнения"), - "first_name_short": MessageLookupByLibrary.simpleMessage( - "В имени должен быть минимум 1 символ"), - "fit_type": MessageLookupByLibrary.simpleMessage("Поддержание формы"), - "fit_type_desc": MessageLookupByLibrary.simpleMessage( - "План питания для поддержания формы сбалансированный и разнообразный, чтобы обеспечить организм всеми необходимыми питательными веществами. Общие принципы: \n● Дробное питание; \n● Разнообразие продуктов; \n● Контроль порций; \n● Питьевой режим; \n● Ограничение вредных продуктов;"), - "fitness": MessageLookupByLibrary.simpleMessage("Поддержка формы"), - "from": MessageLookupByLibrary.simpleMessage("от"), - "from_a_to_z": MessageLookupByLibrary.simpleMessage("Название: А-Я"), - "from_z_to_a": MessageLookupByLibrary.simpleMessage("Название: Я-А"), - "gallery": MessageLookupByLibrary.simpleMessage("Галерея"), - "gr": MessageLookupByLibrary.simpleMessage("гр"), - "grams": MessageLookupByLibrary.simpleMessage("гр"), - "height_measurements": - MessageLookupByLibrary.simpleMessage("Замер роста"), - "hide": MessageLookupByLibrary.simpleMessage("Свернуть"), - "hip_circumference": - MessageLookupByLibrary.simpleMessage("Обхват бедер"), - "hips": MessageLookupByLibrary.simpleMessage("Бедра"), - "in_progress": MessageLookupByLibrary.simpleMessage("В процессе"), - "inactive_diet_state": MessageLookupByLibrary.simpleMessage("Черновик"), - "initial_measurements": - MessageLookupByLibrary.simpleMessage("Первичные замеры"), - "label": MessageLookupByLibrary.simpleMessage("Название"), - "language": MessageLookupByLibrary.simpleMessage("Язык"), - "last_name": MessageLookupByLibrary.simpleMessage("Фамилия"), - "last_name_empty": MessageLookupByLibrary.simpleMessage( - "Фамилия обязательна для заполнения"), - "last_name_short": MessageLookupByLibrary.simpleMessage( - "В фамилии должен быть минимум 6 символов"), - "lbl_english": MessageLookupByLibrary.simpleMessage("English"), - "light_type": MessageLookupByLibrary.simpleMessage("Легкая"), - "light_type_desc": MessageLookupByLibrary.simpleMessage( - "С некоторыми видами диет можно употреблять алкоголь в умеренных количествах. Рекомендуется совмещать вместе с низкокалорийными закусками."), - "link_was_copied": - MessageLookupByLibrary.simpleMessage("Ссылка успешно скопирована"), - "loading": MessageLookupByLibrary.simpleMessage("Загрузка..."), - "male": MessageLookupByLibrary.simpleMessage("Мужской"), - "meal": MessageLookupByLibrary.simpleMessage("Приём пищи"), - "meat": MessageLookupByLibrary.simpleMessage("Мясо"), - "meat_type": MessageLookupByLibrary.simpleMessage("С мясом"), - "meat_type_desc": MessageLookupByLibrary.simpleMessage( - "Диета с мясом полезная и сбалансированная. Включает в себя нежирное мясо: курицу, индейку, кролика или говядину. В сочетании с овощами получаете все необходимые витамины и минералы. Не забывайте о порциях и старайтесь есть медленно, прислушиваясь к своему организму."), - "milliliter": MessageLookupByLibrary.simpleMessage("мл"), - "minimal_customer_price": MessageLookupByLibrary.simpleMessage( - "Минимальная цена для покупателя: 1200₽"), - "most_new": MessageLookupByLibrary.simpleMessage("Самые новые"), - "most_old": MessageLookupByLibrary.simpleMessage("Самые старые"), - "msg_network_err": - MessageLookupByLibrary.simpleMessage("Сетевая ошибка!"), - "msg_something_went_wrong": - MessageLookupByLibrary.simpleMessage("Что то пошло не так!"), - "my_blog": MessageLookupByLibrary.simpleMessage("Мой блог"), - "my_diets": MessageLookupByLibrary.simpleMessage("Мои диеты"), - "my_plans": MessageLookupByLibrary.simpleMessage("Мои планы"), - "my_settings": MessageLookupByLibrary.simpleMessage("Мои настройки"), - "name_empty": MessageLookupByLibrary.simpleMessage( - "Имя пользователя обязательно для заполнения"), - "name_short": MessageLookupByLibrary.simpleMessage( - "В имени пользователя должно быть минимум 6 символов"), - "no": MessageLookupByLibrary.simpleMessage("Нет"), - "no_account": - MessageLookupByLibrary.simpleMessage("У меня нет аккаунта"), - "one_option": MessageLookupByLibrary.simpleMessage("1 опция"), - "option": MessageLookupByLibrary.simpleMessage("Опция"), - "option_content": - MessageLookupByLibrary.simpleMessage("Содержание опции"), - "option_content_hint_text": - MessageLookupByLibrary.simpleMessage("На связи 7 дней в неделю"), - "option_desc": MessageLookupByLibrary.simpleMessage("Описание опции"), - "option_desc_hint_text": MessageLookupByLibrary.simpleMessage( - "Этот план питания для похудения на 7 дней сбалансированный и разнообразный"), - "option_duration": - MessageLookupByLibrary.simpleMessage("Продолжительность опции"), - "option_personal_diet_desc": MessageLookupByLibrary.simpleMessage( - "Опция подразумевает создание индивидуальной диеты"), - "option_title": MessageLookupByLibrary.simpleMessage("Заголовок опции"), - "order": MessageLookupByLibrary.simpleMessage("Порядок"), - "password": MessageLookupByLibrary.simpleMessage("Пароль"), - "password_confirmation": - MessageLookupByLibrary.simpleMessage("Подтвердите пароль"), - "password_confirmation_mismatch": - MessageLookupByLibrary.simpleMessage("Пароли не совпадают"), - "password_empty": MessageLookupByLibrary.simpleMessage( - "Пароль обязателен для заполнения"), - "password_short": MessageLookupByLibrary.simpleMessage( - "В пароле должно быть минимум 6 символов"), - "pcs": MessageLookupByLibrary.simpleMessage("шт"), - "personal": MessageLookupByLibrary.simpleMessage("Персональные"), - "personal_diet_state": - MessageLookupByLibrary.simpleMessage("Персональная"), - "photo": MessageLookupByLibrary.simpleMessage("Фото"), - "place_of_living": - MessageLookupByLibrary.simpleMessage("Место проживания"), - "plan_author": MessageLookupByLibrary.simpleMessage("Автор плана"), - "plan_desc": MessageLookupByLibrary.simpleMessage("Описание плана"), - "plan_desc_example": MessageLookupByLibrary.simpleMessage( - "Большое подробное, привлекательное описание плана"), - "plan_duration": MessageLookupByLibrary.simpleMessage("Срок плана"), - "plan_label_desc": - MessageLookupByLibrary.simpleMessage("План для поддержания формы"), - "plans_complete": - MessageLookupByLibrary.simpleMessage("Пройденные планы"), - "popular": MessageLookupByLibrary.simpleMessage("Популярные"), - "preferred_language": - MessageLookupByLibrary.simpleMessage("Предпочитаемый язык общения"), - "pressure_empty": MessageLookupByLibrary.simpleMessage( - "Все показатели давления обязательны к заполнению"), - "pressure_is_not_a_number": MessageLookupByLibrary.simpleMessage( - "Все показатели давления должны быть числами"), - "preview": MessageLookupByLibrary.simpleMessage("Превью"), - "price": MessageLookupByLibrary.simpleMessage("Цена"), - "price_explanation": MessageLookupByLibrary.simpleMessage( - "Разница в ценах, это комиссия Итвио"), - "profile": MessageLookupByLibrary.simpleMessage("Профиль"), - "proteins": MessageLookupByLibrary.simpleMessage("Белки"), - "publish": MessageLookupByLibrary.simpleMessage("Опубликовать"), - "published": MessageLookupByLibrary.simpleMessage("Опубликованные"), - "removeFromActive": - MessageLookupByLibrary.simpleMessage("Снять с публикации"), - "save": MessageLookupByLibrary.simpleMessage("Сохранить"), - "services": MessageLookupByLibrary.simpleMessage("Оказание услуг"), - "settings": MessageLookupByLibrary.simpleMessage("Настройки"), - "share": MessageLookupByLibrary.simpleMessage("Поделиться"), - "skip": MessageLookupByLibrary.simpleMessage("Пропустить"), - "slim": MessageLookupByLibrary.simpleMessage("Похудение"), - "slim_type": MessageLookupByLibrary.simpleMessage("Похудение"), - "slim_type_desc": MessageLookupByLibrary.simpleMessage( - "План питания для похудения должен быть разработан с учётом индивидуальных особенностей организма, возраста, пола, уровня физической активности и состояния здоровья. Общие принципы: \n● Снижение калорийности; \n● Сбалансированный рацион; \n● Разнообразие продуктов; \n● Питьевой режим; \n● Ограничение вредных продуктов;"), - "standard": MessageLookupByLibrary.simpleMessage("Стандарт"), - "startDiet": MessageLookupByLibrary.simpleMessage("Начать диету"), - "tell_your_schedule": MessageLookupByLibrary.simpleMessage( - "Расскажите в свободной форме о том как просыпаетесь, когда едите, когда ложитесь спать:"), - "three_options": MessageLookupByLibrary.simpleMessage("3 опции"), - "toOffer": MessageLookupByLibrary.simpleMessage("Предложить"), - "to_draft": MessageLookupByLibrary.simpleMessage("В черновик"), - "unfavorite_foods": - MessageLookupByLibrary.simpleMessage("Нелюбимые продукты"), - "up_pressure": MessageLookupByLibrary.simpleMessage( - "Верхние показатели давления:"), - "user_authorization": - MessageLookupByLibrary.simpleMessage("Аутентификация"), - "user_data": - MessageLookupByLibrary.simpleMessage("Данные пользователя"), - "user_registration": - MessageLookupByLibrary.simpleMessage("Регистрация пользователя"), - "username": MessageLookupByLibrary.simpleMessage("Имя пользователя"), - "vegan": MessageLookupByLibrary.simpleMessage("Веган."), - "vegan_type": MessageLookupByLibrary.simpleMessage("Вегетарианская"), - "vegan_type_desc": MessageLookupByLibrary.simpleMessage( - "Диета основана на потреблении растительной пищи и отказе от продуктов животного происхождения. Такой тип питания может быть разнообразным и вкусным, а также полезным для здоровья."), - "waist": MessageLookupByLibrary.simpleMessage("Талия"), - "waist_circumference": - MessageLookupByLibrary.simpleMessage("Обхват талии"), - "weight": MessageLookupByLibrary.simpleMessage("Вес"), - "weight_chart": MessageLookupByLibrary.simpleMessage("График веса"), - "weight_measurements": - MessageLookupByLibrary.simpleMessage("Замер веса"), - "wellness": - MessageLookupByLibrary.simpleMessage("Улучшение самочувствия"), - "wellness_type": - MessageLookupByLibrary.simpleMessage("Улучшение самочувствия"), - "wellness_type_desc": MessageLookupByLibrary.simpleMessage( - "Если вы любите мучные продукты, но хотите придерживаться диеты, вам подходит диета с добавленим мучных блюд на основе цельнозерновых вариантов. В них больше сложных углеводов и клетчатки, что способствует длительному чувству сытости и поддерживает здоровье пищеварительной системы."), - "what_is_your_name": - MessageLookupByLibrary.simpleMessage("Как вас зовут?"), - "wrong_credentials": MessageLookupByLibrary.simpleMessage( - "Неверные данные пользователя"), - "you_will_get": MessageLookupByLibrary.simpleMessage("Вы получите"), - "your_blood_pressure": - MessageLookupByLibrary.simpleMessage("Ваше артериальное давление?"), - "your_favorite_sports": - MessageLookupByLibrary.simpleMessage("Ваши спортивные увлечения?"), - "your_gender": MessageLookupByLibrary.simpleMessage("Ваш пол?"), - "your_height": MessageLookupByLibrary.simpleMessage("Ваш рост:"), - "your_schedule": MessageLookupByLibrary.simpleMessage("Ваш режим дня?"), - "your_weight": MessageLookupByLibrary.simpleMessage("Ваш вес:") - }; + "Moscow": MessageLookupByLibrary.simpleMessage("Москва"), + "Russia": MessageLookupByLibrary.simpleMessage("Россия"), + "about_diet": MessageLookupByLibrary.simpleMessage("Об этой диете"), + "about_plan": MessageLookupByLibrary.simpleMessage("Об этом плане"), + "active": MessageLookupByLibrary.simpleMessage("Активен"), + "active_diet_state": MessageLookupByLibrary.simpleMessage("Активная"), + "add": MessageLookupByLibrary.simpleMessage("Добавить"), + "add_cover": MessageLookupByLibrary.simpleMessage("Добавьте обложку"), + "add_measure": MessageLookupByLibrary.simpleMessage("Добавить замер"), + "adding_plan": MessageLookupByLibrary.simpleMessage("Добавление плана"), + "additional_information": MessageLookupByLibrary.simpleMessage( + "Дополнительная информация", + ), + "admin": MessageLookupByLibrary.simpleMessage("Админ"), + "all": MessageLookupByLibrary.simpleMessage("Все"), + "allergies_presence": MessageLookupByLibrary.simpleMessage( + "Наличие аллергии", + ), + "another_form_of_comment": MessageLookupByLibrary.simpleMessage( + "комментария", + ), + "another_form_of_day": MessageLookupByLibrary.simpleMessage("дня"), + "answer": MessageLookupByLibrary.simpleMessage("Ответить"), + "archived": MessageLookupByLibrary.simpleMessage("В архиве"), + "authentificate": MessageLookupByLibrary.simpleMessage("Войти"), + "average_pressure": MessageLookupByLibrary.simpleMessage( + "Средние показатели давления:", + ), + "bodymass_chart": MessageLookupByLibrary.simpleMessage("График ИМТ"), + "by_default": MessageLookupByLibrary.simpleMessage("По умолчянию"), + "calories": MessageLookupByLibrary.simpleMessage("Калории"), + "carb_type": MessageLookupByLibrary.simpleMessage("Мучное"), + "carb_type_desc": MessageLookupByLibrary.simpleMessage( + "Если вы любите мучные продукты, но хотите придерживаться диеты, вам подходит диета с добавленим мучных блюд на основе цельнозерновых вариантов. В них больше сложных углеводов и клетчатки, что способствует длительному чувству сытости и поддерживает здоровье пищеварительной системы.", + ), + "carbohydrates": MessageLookupByLibrary.simpleMessage("Углеводы"), + "chat": MessageLookupByLibrary.simpleMessage("Чат"), + "chest": MessageLookupByLibrary.simpleMessage("Грудь"), + "chest_circumference": MessageLookupByLibrary.simpleMessage("Обхват груди"), + "choose_diet_duration": MessageLookupByLibrary.simpleMessage( + "Выберите срок диеты", + ), + "choose_plan_duration": MessageLookupByLibrary.simpleMessage( + "Выберите срок плана", + ), + "choose_start_diet_date": MessageLookupByLibrary.simpleMessage( + "Выберите дату старты диеты. Она отобразиться у Вас в дневнике", + ), + "circumference_empty": MessageLookupByLibrary.simpleMessage( + "Все замеры обязательны к заполнению", + ), + "circumference_is_not_a_number": MessageLookupByLibrary.simpleMessage( + "Все замеры должны быть числами", + ), + "circumferences_chart": MessageLookupByLibrary.simpleMessage( + "График обхватов", + ), + "city": MessageLookupByLibrary.simpleMessage("Город"), + "city_of_living": MessageLookupByLibrary.simpleMessage("Город проживания"), + "comfort": MessageLookupByLibrary.simpleMessage("Комфорт"), + "comment": MessageLookupByLibrary.simpleMessage("комментарий"), + "comments": MessageLookupByLibrary.simpleMessage("Комментарии"), + "comments_plural": MessageLookupByLibrary.simpleMessage("комментариев"), + "complain": MessageLookupByLibrary.simpleMessage("Пожаловаться"), + "continueButton": MessageLookupByLibrary.simpleMessage("Продолжить"), + "continue_": MessageLookupByLibrary.simpleMessage("Продолжить"), + "copied": MessageLookupByLibrary.simpleMessage("cкопирован"), + "copy_link": MessageLookupByLibrary.simpleMessage("Скопировать ссылку"), + "country": MessageLookupByLibrary.simpleMessage("Страна"), + "create_diet": MessageLookupByLibrary.simpleMessage("Создание диеты"), + "customer_price": MessageLookupByLibrary.simpleMessage( + "Цена для покупателя", + ), + "date_of_birth": MessageLookupByLibrary.simpleMessage("Дата рождения"), + "day": MessageLookupByLibrary.simpleMessage("День"), + "days": MessageLookupByLibrary.simpleMessage("дней"), + "deleted": MessageLookupByLibrary.simpleMessage("Удалена"), + "diary": MessageLookupByLibrary.simpleMessage("Дневник"), + "diet": MessageLookupByLibrary.simpleMessage("Диета"), + "diet_author": MessageLookupByLibrary.simpleMessage("Автор диеты"), + "diet_plan": MessageLookupByLibrary.simpleMessage("План диеты"), + "diet_state": MessageLookupByLibrary.simpleMessage("Статус диеты"), + "diet_type": MessageLookupByLibrary.simpleMessage("Тип диеты"), + "do_you_have_hypertension_tendency": MessageLookupByLibrary.simpleMessage( + "Есть ли у вас гипертония?", + ), + "do_you_have_hypotension_tendency": MessageLookupByLibrary.simpleMessage( + "Есть ли у вас гипотония?", + ), + "do_you_take_pills": MessageLookupByLibrary.simpleMessage( + "Принимаете ли вы лекарства или бады?", + ), + "down_pressure": MessageLookupByLibrary.simpleMessage( + "Нижние показатели давления:", + ), + "draft": MessageLookupByLibrary.simpleMessage("Черновик"), + "drafted": MessageLookupByLibrary.simpleMessage("Черновики"), + "eating_behavior": MessageLookupByLibrary.simpleMessage( + "Пищевое поведение", + ), + "eating_behavior_type": MessageLookupByLibrary.simpleMessage( + "Формирование пищевого поведения", + ), + "eating_behavior_type_desc": MessageLookupByLibrary.simpleMessage( + "Формирование здорового пищевого поведения — это процесс, который включает в себя изменение привычек и отношения к еде. Он направлен на то, чтобы помочь людям научиться правильно питаться и поддерживать здоровый образ жизни.Основные принципы формирования здорового пищевого поведения: \n● Разнообразие продуктов; \n● Сбалансированный рацион; \n● Питьевой режим; \n● Ограничение вредных продуктов; \n● Регулярные приёмы пищи; \n● Умеренность;Осознанное питание; \n● Физическая активность;", + ), + "economy": MessageLookupByLibrary.simpleMessage("Эконом"), + "edit": MessageLookupByLibrary.simpleMessage("Редактировать"), + "email": MessageLookupByLibrary.simpleMessage("Электронная почта"), + "email_empty": MessageLookupByLibrary.simpleMessage( + "Необходимо ввести адрес электронной почты", + ), + "email_invalid": MessageLookupByLibrary.simpleMessage( + "Некорректный адрес электронной почты", + ), + "enter_additional_information": MessageLookupByLibrary.simpleMessage( + "Введите любую дополнительную информацию на своё усмотрение:", + ), + "enter_diet_description": MessageLookupByLibrary.simpleMessage( + "Введите описание диеты", + ), + "enter_diet_name": MessageLookupByLibrary.simpleMessage( + "Выведите название диеты", + ), + "enter_information": MessageLookupByLibrary.simpleMessage( + "Введите информацию...", + ), + "exit": MessageLookupByLibrary.simpleMessage("Выйти"), + "expand": MessageLookupByLibrary.simpleMessage("Показать полностью"), + "fats": MessageLookupByLibrary.simpleMessage("Жиры"), + "favorite_foods": MessageLookupByLibrary.simpleMessage("Любимые продукты"), + "favorite_unfavorite_foods": MessageLookupByLibrary.simpleMessage( + "Ваши любимые/нелюбимые продукты питания?", + ), + "female": MessageLookupByLibrary.simpleMessage("Женский"), + "fill_in_information": MessageLookupByLibrary.simpleMessage( + "Заполните информацию:", + ), + "finish": MessageLookupByLibrary.simpleMessage("Завершить"), + "first_name": MessageLookupByLibrary.simpleMessage("Имя"), + "first_name_empty": MessageLookupByLibrary.simpleMessage( + "Имя обязательно для заполнения", + ), + "first_name_short": MessageLookupByLibrary.simpleMessage( + "В имени должен быть минимум 1 символ", + ), + "fit_type": MessageLookupByLibrary.simpleMessage("Поддержание формы"), + "fit_type_desc": MessageLookupByLibrary.simpleMessage( + "План питания для поддержания формы сбалансированный и разнообразный, чтобы обеспечить организм всеми необходимыми питательными веществами. Общие принципы: \n● Дробное питание; \n● Разнообразие продуктов; \n● Контроль порций; \n● Питьевой режим; \n● Ограничение вредных продуктов;", + ), + "fitness": MessageLookupByLibrary.simpleMessage("Поддержка формы"), + "from": MessageLookupByLibrary.simpleMessage("от"), + "from_a_to_z": MessageLookupByLibrary.simpleMessage("Название: А-Я"), + "from_z_to_a": MessageLookupByLibrary.simpleMessage("Название: Я-А"), + "gallery": MessageLookupByLibrary.simpleMessage("Галерея"), + "gr": MessageLookupByLibrary.simpleMessage("гр"), + "grams": MessageLookupByLibrary.simpleMessage("гр"), + "height_measurements": MessageLookupByLibrary.simpleMessage("Замер роста"), + "hide": MessageLookupByLibrary.simpleMessage("Свернуть"), + "hip_circumference": MessageLookupByLibrary.simpleMessage("Обхват бедер"), + "hips": MessageLookupByLibrary.simpleMessage("Бедра"), + "in_progress": MessageLookupByLibrary.simpleMessage("В процессе"), + "inactive_diet_state": MessageLookupByLibrary.simpleMessage("Черновик"), + "initial_measurements": MessageLookupByLibrary.simpleMessage( + "Первичные замеры", + ), + "label": MessageLookupByLibrary.simpleMessage("Название"), + "language": MessageLookupByLibrary.simpleMessage("Язык"), + "last_name": MessageLookupByLibrary.simpleMessage("Фамилия"), + "last_name_empty": MessageLookupByLibrary.simpleMessage( + "Фамилия обязательна для заполнения", + ), + "last_name_short": MessageLookupByLibrary.simpleMessage( + "В фамилии должен быть минимум 6 символов", + ), + "lbl_english": MessageLookupByLibrary.simpleMessage("English"), + "light_type": MessageLookupByLibrary.simpleMessage("Легкая"), + "light_type_desc": MessageLookupByLibrary.simpleMessage( + "С некоторыми видами диет можно употреблять алкоголь в умеренных количествах. Рекомендуется совмещать вместе с низкокалорийными закусками.", + ), + "link_was_copied": MessageLookupByLibrary.simpleMessage( + "Ссылка успешно скопирована", + ), + "loading": MessageLookupByLibrary.simpleMessage("Загрузка..."), + "male": MessageLookupByLibrary.simpleMessage("Мужской"), + "meal": MessageLookupByLibrary.simpleMessage("Приём пищи"), + "meat": MessageLookupByLibrary.simpleMessage("Мясо"), + "meat_type": MessageLookupByLibrary.simpleMessage("С мясом"), + "meat_type_desc": MessageLookupByLibrary.simpleMessage( + "Диета с мясом полезная и сбалансированная. Включает в себя нежирное мясо: курицу, индейку, кролика или говядину. В сочетании с овощами получаете все необходимые витамины и минералы. Не забывайте о порциях и старайтесь есть медленно, прислушиваясь к своему организму.", + ), + "milliliter": MessageLookupByLibrary.simpleMessage("мл"), + "minimal_customer_price": MessageLookupByLibrary.simpleMessage( + "Минимальная цена для покупателя: 1200₽", + ), + "most_new": MessageLookupByLibrary.simpleMessage("Самые новые"), + "most_old": MessageLookupByLibrary.simpleMessage("Самые старые"), + "msg_network_err": MessageLookupByLibrary.simpleMessage("Сетевая ошибка!"), + "msg_something_went_wrong": MessageLookupByLibrary.simpleMessage( + "Что то пошло не так!", + ), + "my_blog": MessageLookupByLibrary.simpleMessage("Мой блог"), + "my_diets": MessageLookupByLibrary.simpleMessage("Мои диеты"), + "my_plans": MessageLookupByLibrary.simpleMessage("Мои планы"), + "my_settings": MessageLookupByLibrary.simpleMessage("Мои настройки"), + "name_empty": MessageLookupByLibrary.simpleMessage( + "Имя пользователя обязательно для заполнения", + ), + "name_short": MessageLookupByLibrary.simpleMessage( + "В имени пользователя должно быть минимум 6 символов", + ), + "no": MessageLookupByLibrary.simpleMessage("Нет"), + "no_account": MessageLookupByLibrary.simpleMessage("У меня нет аккаунта"), + "one_option": MessageLookupByLibrary.simpleMessage("1 опция"), + "option": MessageLookupByLibrary.simpleMessage("Опция"), + "option_content": MessageLookupByLibrary.simpleMessage("Содержание опции"), + "option_content_hint_text": MessageLookupByLibrary.simpleMessage( + "На связи 7 дней в неделю", + ), + "option_desc": MessageLookupByLibrary.simpleMessage("Описание опции"), + "option_desc_hint_text": MessageLookupByLibrary.simpleMessage( + "Этот план питания для похудения на 7 дней сбалансированный и разнообразный", + ), + "option_duration": MessageLookupByLibrary.simpleMessage( + "Продолжительность опции", + ), + "option_personal_diet_desc": MessageLookupByLibrary.simpleMessage( + "Опция подразумевает создание индивидуальной диеты", + ), + "option_title": MessageLookupByLibrary.simpleMessage("Заголовок опции"), + "order": MessageLookupByLibrary.simpleMessage("Порядок"), + "password": MessageLookupByLibrary.simpleMessage("Пароль"), + "password_confirmation": MessageLookupByLibrary.simpleMessage( + "Подтвердите пароль", + ), + "password_confirmation_mismatch": MessageLookupByLibrary.simpleMessage( + "Пароли не совпадают", + ), + "password_empty": MessageLookupByLibrary.simpleMessage( + "Пароль обязателен для заполнения", + ), + "password_short": MessageLookupByLibrary.simpleMessage( + "В пароле должно быть минимум 6 символов", + ), + "pcs": MessageLookupByLibrary.simpleMessage("шт"), + "personal": MessageLookupByLibrary.simpleMessage("Персональные"), + "personal_diet_state": MessageLookupByLibrary.simpleMessage("Персональная"), + "photo": MessageLookupByLibrary.simpleMessage("Фото"), + "place_of_living": MessageLookupByLibrary.simpleMessage("Место проживания"), + "plan_author": MessageLookupByLibrary.simpleMessage("Автор плана"), + "plan_desc": MessageLookupByLibrary.simpleMessage("Описание плана"), + "plan_desc_example": MessageLookupByLibrary.simpleMessage( + "Большое подробное, привлекательное описание плана", + ), + "plan_duration": MessageLookupByLibrary.simpleMessage("Срок плана"), + "plan_label_desc": MessageLookupByLibrary.simpleMessage( + "План для поддержания формы", + ), + "plans_complete": MessageLookupByLibrary.simpleMessage("Пройденные планы"), + "popular": MessageLookupByLibrary.simpleMessage("Популярные"), + "preferred_language": MessageLookupByLibrary.simpleMessage( + "Предпочитаемый язык общения", + ), + "pressure_empty": MessageLookupByLibrary.simpleMessage( + "Все показатели давления обязательны к заполнению", + ), + "pressure_is_not_a_number": MessageLookupByLibrary.simpleMessage( + "Все показатели давления должны быть числами", + ), + "preview": MessageLookupByLibrary.simpleMessage("Превью"), + "price": MessageLookupByLibrary.simpleMessage("Цена"), + "price_explanation": MessageLookupByLibrary.simpleMessage( + "Разница в ценах, это комиссия Итвио", + ), + "profile": MessageLookupByLibrary.simpleMessage("Профиль"), + "proteins": MessageLookupByLibrary.simpleMessage("Белки"), + "publish": MessageLookupByLibrary.simpleMessage("Опубликовать"), + "published": MessageLookupByLibrary.simpleMessage("Опубликованные"), + "removeFromActive": MessageLookupByLibrary.simpleMessage( + "Снять с публикации", + ), + "save": MessageLookupByLibrary.simpleMessage("Сохранить"), + "services": MessageLookupByLibrary.simpleMessage("Оказание услуг"), + "settings": MessageLookupByLibrary.simpleMessage("Настройки"), + "share": MessageLookupByLibrary.simpleMessage("Поделиться"), + "skip": MessageLookupByLibrary.simpleMessage("Пропустить"), + "slim": MessageLookupByLibrary.simpleMessage("Похудение"), + "slim_type": MessageLookupByLibrary.simpleMessage("Похудение"), + "slim_type_desc": MessageLookupByLibrary.simpleMessage( + "План питания для похудения должен быть разработан с учётом индивидуальных особенностей организма, возраста, пола, уровня физической активности и состояния здоровья. Общие принципы: \n● Снижение калорийности; \n● Сбалансированный рацион; \n● Разнообразие продуктов; \n● Питьевой режим; \n● Ограничение вредных продуктов;", + ), + "standard": MessageLookupByLibrary.simpleMessage("Стандарт"), + "startDiet": MessageLookupByLibrary.simpleMessage("Начать диету"), + "tell_your_schedule": MessageLookupByLibrary.simpleMessage( + "Расскажите в свободной форме о том как просыпаетесь, когда едите, когда ложитесь спать:", + ), + "three_options": MessageLookupByLibrary.simpleMessage("3 опции"), + "toOffer": MessageLookupByLibrary.simpleMessage("Предложить"), + "to_draft": MessageLookupByLibrary.simpleMessage("В черновик"), + "unfavorite_foods": MessageLookupByLibrary.simpleMessage( + "Нелюбимые продукты", + ), + "up_pressure": MessageLookupByLibrary.simpleMessage( + "Верхние показатели давления:", + ), + "user_authorization": MessageLookupByLibrary.simpleMessage( + "Аутентификация", + ), + "user_data": MessageLookupByLibrary.simpleMessage("Данные пользователя"), + "user_registration": MessageLookupByLibrary.simpleMessage( + "Регистрация пользователя", + ), + "username": MessageLookupByLibrary.simpleMessage("Имя пользователя"), + "vegan": MessageLookupByLibrary.simpleMessage("Веган."), + "vegan_type": MessageLookupByLibrary.simpleMessage("Вегетарианская"), + "vegan_type_desc": MessageLookupByLibrary.simpleMessage( + "Диета основана на потреблении растительной пищи и отказе от продуктов животного происхождения. Такой тип питания может быть разнообразным и вкусным, а также полезным для здоровья.", + ), + "waist": MessageLookupByLibrary.simpleMessage("Талия"), + "waist_circumference": MessageLookupByLibrary.simpleMessage("Обхват талии"), + "weight": MessageLookupByLibrary.simpleMessage("Вес"), + "weight_chart": MessageLookupByLibrary.simpleMessage("График веса"), + "weight_measurements": MessageLookupByLibrary.simpleMessage("Замер веса"), + "wellness": MessageLookupByLibrary.simpleMessage("Улучшение самочувствия"), + "wellness_type": MessageLookupByLibrary.simpleMessage( + "Улучшение самочувствия", + ), + "wellness_type_desc": MessageLookupByLibrary.simpleMessage( + "Если вы любите мучные продукты, но хотите придерживаться диеты, вам подходит диета с добавленим мучных блюд на основе цельнозерновых вариантов. В них больше сложных углеводов и клетчатки, что способствует длительному чувству сытости и поддерживает здоровье пищеварительной системы.", + ), + "what_is_your_name": MessageLookupByLibrary.simpleMessage("Как вас зовут?"), + "wrong_credentials": MessageLookupByLibrary.simpleMessage( + "Неверные данные пользователя", + ), + "you_will_get": MessageLookupByLibrary.simpleMessage("Вы получите"), + "your_blood_pressure": MessageLookupByLibrary.simpleMessage( + "Ваше артериальное давление?", + ), + "your_favorite_sports": MessageLookupByLibrary.simpleMessage( + "Ваши спортивные увлечения?", + ), + "your_gender": MessageLookupByLibrary.simpleMessage("Ваш пол?"), + "your_height": MessageLookupByLibrary.simpleMessage("Ваш рост:"), + "your_schedule": MessageLookupByLibrary.simpleMessage("Ваш режим дня?"), + "your_weight": MessageLookupByLibrary.simpleMessage("Ваш вес:"), + }; } diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart index bd4faecc..68b55718 100644 --- a/lib/generated/l10n.dart +++ b/lib/generated/l10n.dart @@ -18,17 +18,20 @@ class S { static S? _current; static S get current { - assert(_current != null, - 'No instance of S was loaded. Try to initialize the S delegate before accessing S.current.'); + assert( + _current != null, + 'No instance of S was loaded. Try to initialize the S delegate before accessing S.current.', + ); return _current!; } static const AppLocalizationDelegate delegate = AppLocalizationDelegate(); static Future load(Locale locale) { - final name = (locale.countryCode?.isEmpty ?? false) - ? locale.languageCode - : locale.toString(); + final name = + (locale.countryCode?.isEmpty ?? false) + ? locale.languageCode + : locale.toString(); final localeName = Intl.canonicalizedLocale(name); return initializeMessages(localeName).then((_) { Intl.defaultLocale = localeName; @@ -41,8 +44,10 @@ class S { static S of(BuildContext context) { final instance = S.maybeOf(context); - assert(instance != null, - 'No instance of S present in the widget tree. Did you add S.delegate in localizationsDelegates?'); + assert( + instance != null, + 'No instance of S present in the widget tree. Did you add S.delegate in localizationsDelegates?', + ); return instance!; } @@ -60,14 +65,9 @@ class S { ); } - /// `Элетронная почта` + /// `Электронная почта` String get email { - return Intl.message( - 'Элетронная почта', - name: 'email', - desc: '', - args: [], - ); + return Intl.message('Электронная почта', name: 'email', desc: '', args: []); } /// `Имя пользователя` @@ -82,12 +82,7 @@ class S { /// `Пароль` String get password { - return Intl.message( - 'Пароль', - name: 'password', - desc: '', - args: [], - ); + return Intl.message('Пароль', name: 'password', desc: '', args: []); } /// `Подтвердите пароль` @@ -112,22 +107,12 @@ class S { /// `Имя` String get first_name { - return Intl.message( - 'Имя', - name: 'first_name', - desc: '', - args: [], - ); + return Intl.message('Имя', name: 'first_name', desc: '', args: []); } /// `Фамилия` String get last_name { - return Intl.message( - 'Фамилия', - name: 'last_name', - desc: '', - args: [], - ); + return Intl.message('Фамилия', name: 'last_name', desc: '', args: []); } /// `Как вас зовут?` @@ -152,42 +137,22 @@ class S { /// `Страна` String get country { - return Intl.message( - 'Страна', - name: 'country', - desc: '', - args: [], - ); + return Intl.message('Страна', name: 'country', desc: '', args: []); } /// `Россия` String get Russia { - return Intl.message( - 'Россия', - name: 'Russia', - desc: '', - args: [], - ); + return Intl.message('Россия', name: 'Russia', desc: '', args: []); } /// `Город` String get city { - return Intl.message( - 'Город', - name: 'city', - desc: '', - args: [], - ); + return Intl.message('Город', name: 'city', desc: '', args: []); } /// `Москва` String get Moscow { - return Intl.message( - 'Москва', - name: 'Moscow', - desc: '', - args: [], - ); + return Intl.message('Москва', name: 'Moscow', desc: '', args: []); } /// `Место проживания` @@ -242,22 +207,12 @@ class S { /// `Мужской` String get male { - return Intl.message( - 'Мужской', - name: 'male', - desc: '', - args: [], - ); + return Intl.message('Мужской', name: 'male', desc: '', args: []); } /// `Женский` String get female { - return Intl.message( - 'Женский', - name: 'female', - desc: '', - args: [], - ); + return Intl.message('Женский', name: 'female', desc: '', args: []); } /// `Замер веса` @@ -272,12 +227,7 @@ class S { /// `Ваш вес:` String get your_weight { - return Intl.message( - 'Ваш вес:', - name: 'your_weight', - desc: '', - args: [], - ); + return Intl.message('Ваш вес:', name: 'your_weight', desc: '', args: []); } /// `Замер роста` @@ -292,12 +242,7 @@ class S { /// `Ваш рост:` String get your_height { - return Intl.message( - 'Ваш рост:', - name: 'your_height', - desc: '', - args: [], - ); + return Intl.message('Ваш рост:', name: 'your_height', desc: '', args: []); } /// `Наличие аллергии` @@ -322,22 +267,12 @@ class S { /// `Ваш пол?` String get your_gender { - return Intl.message( - 'Ваш пол?', - name: 'your_gender', - desc: '', - args: [], - ); + return Intl.message('Ваш пол?', name: 'your_gender', desc: '', args: []); } /// `Нет` String get no { - return Intl.message( - 'Нет', - name: 'no', - desc: '', - args: [], - ); + return Intl.message('Нет', name: 'no', desc: '', args: []); } /// `Есть ли у вас гипертония?` @@ -390,10 +325,10 @@ class S { ); } - /// `Есть ли у вас гипотония?` + /// `Есть ли у вас гипотония?` String get do_you_have_hypotension_tendency { return Intl.message( - 'Есть ли у вас гипотония?', + 'Есть ли у вас гипотония?', name: 'do_you_have_hypotension_tendency', desc: '', args: [], @@ -482,22 +417,12 @@ class S { /// `English` String get lbl_english { - return Intl.message( - 'English', - name: 'lbl_english', - desc: '', - args: [], - ); + return Intl.message('English', name: 'lbl_english', desc: '', args: []); } /// `Завершить` String get finish { - return Intl.message( - 'Завершить', - name: 'finish', - desc: '', - args: [], - ); + return Intl.message('Завершить', name: 'finish', desc: '', args: []); } /// `Предпочитаемый язык общения` @@ -522,12 +447,7 @@ class S { /// `Пропустить` String get skip { - return Intl.message( - 'Пропустить', - name: 'skip', - desc: '', - args: [], - ); + return Intl.message('Пропустить', name: 'skip', desc: '', args: []); } /// `Заполните информацию:` @@ -732,12 +652,7 @@ class S { /// `Войти` String get authentificate { - return Intl.message( - 'Войти', - name: 'authentificate', - desc: '', - args: [], - ); + return Intl.message('Войти', name: 'authentificate', desc: '', args: []); } /// `Аутентификация` @@ -752,12 +667,7 @@ class S { /// `Загрузка...` String get loading { - return Intl.message( - 'Загрузка...', - name: 'loading', - desc: '', - args: [], - ); + return Intl.message('Загрузка...', name: 'loading', desc: '', args: []); } /// `График веса` @@ -802,102 +712,52 @@ class S { /// `Грудь` String get chest { - return Intl.message( - 'Грудь', - name: 'chest', - desc: '', - args: [], - ); + return Intl.message('Грудь', name: 'chest', desc: '', args: []); } /// `Талия` String get waist { - return Intl.message( - 'Талия', - name: 'waist', - desc: '', - args: [], - ); + return Intl.message('Талия', name: 'waist', desc: '', args: []); } /// `Бедра` String get hips { - return Intl.message( - 'Бедра', - name: 'hips', - desc: '', - args: [], - ); + return Intl.message('Бедра', name: 'hips', desc: '', args: []); } /// `Выйти` String get exit { - return Intl.message( - 'Выйти', - name: 'exit', - desc: '', - args: [], - ); + return Intl.message('Выйти', name: 'exit', desc: '', args: []); } /// `Активен` String get active { - return Intl.message( - 'Активен', - name: 'active', - desc: '', - args: [], - ); + return Intl.message('Активен', name: 'active', desc: '', args: []); } /// `В архиве` String get archived { - return Intl.message( - 'В архиве', - name: 'archived', - desc: '', - args: [], - ); + return Intl.message('В архиве', name: 'archived', desc: '', args: []); } /// `Черновик` String get draft { - return Intl.message( - 'Черновик', - name: 'draft', - desc: '', - args: [], - ); + return Intl.message('Черновик', name: 'draft', desc: '', args: []); } /// `Мой блог` String get my_blog { - return Intl.message( - 'Мой блог', - name: 'my_blog', - desc: '', - args: [], - ); + return Intl.message('Мой блог', name: 'my_blog', desc: '', args: []); } /// `Язык` String get language { - return Intl.message( - 'Язык', - name: 'language', - desc: '', - args: [], - ); + return Intl.message('Язык', name: 'language', desc: '', args: []); } /// `В процессе` String get in_progress { - return Intl.message( - 'В процессе', - name: 'in_progress', - desc: '', - args: [], - ); + return Intl.message('В процессе', name: 'in_progress', desc: '', args: []); } /// `Добавить замер` @@ -912,12 +772,7 @@ class S { /// `Вес` String get weight { - return Intl.message( - 'Вес', - name: 'weight', - desc: '', - args: [], - ); + return Intl.message('Вес', name: 'weight', desc: '', args: []); } /// `Пройденные планы` @@ -942,132 +797,67 @@ class S { /// `Настройки` String get settings { - return Intl.message( - 'Настройки', - name: 'settings', - desc: '', - args: [], - ); + return Intl.message('Настройки', name: 'settings', desc: '', args: []); } /// `Профиль` String get profile { - return Intl.message( - 'Профиль', - name: 'profile', - desc: '', - args: [], - ); + return Intl.message('Профиль', name: 'profile', desc: '', args: []); } /// `Чат` String get chat { - return Intl.message( - 'Чат', - name: 'chat', - desc: '', - args: [], - ); + return Intl.message('Чат', name: 'chat', desc: '', args: []); } /// `Админ` String get admin { - return Intl.message( - 'Админ', - name: 'admin', - desc: '', - args: [], - ); + return Intl.message('Админ', name: 'admin', desc: '', args: []); } /// `Дневник` String get diary { - return Intl.message( - 'Дневник', - name: 'diary', - desc: '', - args: [], - ); + return Intl.message('Дневник', name: 'diary', desc: '', args: []); } /// `Сохранить` String get save { - return Intl.message( - 'Сохранить', - name: 'save', - desc: '', - args: [], - ); + return Intl.message('Сохранить', name: 'save', desc: '', args: []); } /// `шт` String get pcs { - return Intl.message( - 'шт', - name: 'pcs', - desc: '', - args: [], - ); + return Intl.message('шт', name: 'pcs', desc: '', args: []); } /// `гр` String get gr { - return Intl.message( - 'гр', - name: 'gr', - desc: '', - args: [], - ); + return Intl.message('гр', name: 'gr', desc: '', args: []); } /// `мл` String get milliliter { - return Intl.message( - 'мл', - name: 'milliliter', - desc: '', - args: [], - ); + return Intl.message('мл', name: 'milliliter', desc: '', args: []); } /// `гр` String get grams { - return Intl.message( - 'гр', - name: 'grams', - desc: '', - args: [], - ); + return Intl.message('гр', name: 'grams', desc: '', args: []); } /// `Начать диету` String get startDiet { - return Intl.message( - 'Начать диету', - name: 'startDiet', - desc: '', - args: [], - ); + return Intl.message('Начать диету', name: 'startDiet', desc: '', args: []); } /// `Комментарии` String get comments { - return Intl.message( - 'Комментарии', - name: 'comments', - desc: '', - args: [], - ); + return Intl.message('Комментарии', name: 'comments', desc: '', args: []); } /// `комментарий` String get comment { - return Intl.message( - 'комментарий', - name: 'comment', - desc: '', - args: [], - ); + return Intl.message('комментарий', name: 'comment', desc: '', args: []); } /// `комментария` @@ -1092,32 +882,17 @@ class S { /// `дней` String get days { - return Intl.message( - 'дней', - name: 'days', - desc: '', - args: [], - ); + return Intl.message('дней', name: 'days', desc: '', args: []); } /// `День` String get day { - return Intl.message( - 'День', - name: 'day', - desc: '', - args: [], - ); + return Intl.message('День', name: 'day', desc: '', args: []); } /// `дня` String get another_form_of_day { - return Intl.message( - 'дня', - name: 'another_form_of_day', - desc: '', - args: [], - ); + return Intl.message('дня', name: 'another_form_of_day', desc: '', args: []); } /// `комментариев` @@ -1132,32 +907,17 @@ class S { /// `Приём пищи` String get meal { - return Intl.message( - 'Приём пищи', - name: 'meal', - desc: '', - args: [], - ); + return Intl.message('Приём пищи', name: 'meal', desc: '', args: []); } /// `Автор диеты` String get diet_author { - return Intl.message( - 'Автор диеты', - name: 'diet_author', - desc: '', - args: [], - ); + return Intl.message('Автор диеты', name: 'diet_author', desc: '', args: []); } /// `Свернуть` String get hide { - return Intl.message( - 'Свернуть', - name: 'hide', - desc: '', - args: [], - ); + return Intl.message('Свернуть', name: 'hide', desc: '', args: []); } /// `Показать полностью` @@ -1182,22 +942,12 @@ class S { /// `Поделиться` String get share { - return Intl.message( - 'Поделиться', - name: 'share', - desc: '', - args: [], - ); + return Intl.message('Поделиться', name: 'share', desc: '', args: []); } /// `Пожаловаться` String get complain { - return Intl.message( - 'Пожаловаться', - name: 'complain', - desc: '', - args: [], - ); + return Intl.message('Пожаловаться', name: 'complain', desc: '', args: []); } /// `Вегетарианская` @@ -1212,32 +962,17 @@ class S { /// `Легкая` String get light_type { - return Intl.message( - 'Легкая', - name: 'light_type', - desc: '', - args: [], - ); + return Intl.message('Легкая', name: 'light_type', desc: '', args: []); } /// `С мясом` String get meat_type { - return Intl.message( - 'С мясом', - name: 'meat_type', - desc: '', - args: [], - ); + return Intl.message('С мясом', name: 'meat_type', desc: '', args: []); } /// `Мучное` String get carb_type { - return Intl.message( - 'Мучное', - name: 'carb_type', - desc: '', - args: [], - ); + return Intl.message('Мучное', name: 'carb_type', desc: '', args: []); } /// `Диета основана на потреблении растительной пищи и отказе от продуктов животного происхождения. Такой тип питания может быть разнообразным и вкусным, а также полезным для здоровья.` @@ -1282,62 +1017,32 @@ class S { /// `План диеты` String get diet_plan { - return Intl.message( - 'План диеты', - name: 'diet_plan', - desc: '', - args: [], - ); + return Intl.message('План диеты', name: 'diet_plan', desc: '', args: []); } /// `Калории` String get calories { - return Intl.message( - 'Калории', - name: 'calories', - desc: '', - args: [], - ); + return Intl.message('Калории', name: 'calories', desc: '', args: []); } /// `Белки` String get proteins { - return Intl.message( - 'Белки', - name: 'proteins', - desc: '', - args: [], - ); + return Intl.message('Белки', name: 'proteins', desc: '', args: []); } /// `Жиры` String get fats { - return Intl.message( - 'Жиры', - name: 'fats', - desc: '', - args: [], - ); + return Intl.message('Жиры', name: 'fats', desc: '', args: []); } /// `Углеводы` String get carbohydrates { - return Intl.message( - 'Углеводы', - name: 'carbohydrates', - desc: '', - args: [], - ); + return Intl.message('Углеводы', name: 'carbohydrates', desc: '', args: []); } /// `Ответить` String get answer { - return Intl.message( - 'Ответить', - name: 'answer', - desc: '', - args: [], - ); + return Intl.message('Ответить', name: 'answer', desc: '', args: []); } /// `Ссылка успешно скопирована` @@ -1362,92 +1067,47 @@ class S { /// `Продолжить` String get continue_ { - return Intl.message( - 'Продолжить', - name: 'continue_', - desc: '', - args: [], - ); + return Intl.message('Продолжить', name: 'continue_', desc: '', args: []); } /// `Порядок` String get order { - return Intl.message( - 'Порядок', - name: 'order', - desc: '', - args: [], - ); + return Intl.message('Порядок', name: 'order', desc: '', args: []); } /// `Время прохождения` String get time { - return Intl.message( - 'Время прохождения', - name: 'time', - desc: '', - args: [], - ); + return Intl.message('Время прохождения', name: 'time', desc: '', args: []); } /// `Все` String get all { - return Intl.message( - 'Все', - name: 'all', - desc: '', - args: [], - ); + return Intl.message('Все', name: 'all', desc: '', args: []); } /// `Тип диеты` String get diet_type { - return Intl.message( - 'Тип диеты', - name: 'diet_type', - desc: '', - args: [], - ); + return Intl.message('Тип диеты', name: 'diet_type', desc: '', args: []); } /// `Тип плана` String get plan_type { - return Intl.message( - 'Тип плана', - name: 'plan_type', - desc: '', - args: [], - ); + return Intl.message('Тип плана', name: 'plan_type', desc: '', args: []); } /// `Популярные` String get popular { - return Intl.message( - 'Популярные', - name: 'popular', - desc: '', - args: [], - ); + return Intl.message('Популярные', name: 'popular', desc: '', args: []); } /// `Самые новые` String get most_new { - return Intl.message( - 'Самые новые', - name: 'most_new', - desc: '', - args: [], - ); + return Intl.message('Самые новые', name: 'most_new', desc: '', args: []); } /// `Самые старые` String get most_old { - return Intl.message( - 'Самые старые', - name: 'most_old', - desc: '', - args: [], - ); + return Intl.message('Самые старые', name: 'most_old', desc: '', args: []); } /// `Название: А-Я` @@ -1472,12 +1132,7 @@ class S { /// `По умолчянию` String get by_default { - return Intl.message( - 'По умолчянию', - name: 'by_default', - desc: '', - args: [], - ); + return Intl.message('По умолчянию', name: 'by_default', desc: '', args: []); } /// `Создание диеты` @@ -1522,12 +1177,7 @@ class S { /// `Статус диеты` String get diet_state { - return Intl.message( - 'Статус диеты', - name: 'diet_state', - desc: '', - args: [], - ); + return Intl.message('Статус диеты', name: 'diet_state', desc: '', args: []); } /// `Активная` @@ -1562,42 +1212,22 @@ class S { /// `Мясо` String get meat { - return Intl.message( - 'Мясо', - name: 'meat', - desc: '', - args: [], - ); + return Intl.message('Мясо', name: 'meat', desc: '', args: []); } /// `Веган.` String get vegan { - return Intl.message( - 'Веган.', - name: 'vegan', - desc: '', - args: [], - ); + return Intl.message('Веган.', name: 'vegan', desc: '', args: []); } /// `Фото` String get photo { - return Intl.message( - 'Фото', - name: 'photo', - desc: '', - args: [], - ); + return Intl.message('Фото', name: 'photo', desc: '', args: []); } /// `Галерея` String get gallery { - return Intl.message( - 'Галерея', - name: 'gallery', - desc: '', - args: [], - ); + return Intl.message('Галерея', name: 'gallery', desc: '', args: []); } /// `Добавьте обложку` @@ -1612,52 +1242,27 @@ class S { /// `Добавить` String get add { - return Intl.message( - 'Добавить', - name: 'add', - desc: '', - args: [], - ); + return Intl.message('Добавить', name: 'add', desc: '', args: []); } /// `cкопирован` String get copied { - return Intl.message( - 'cкопирован', - name: 'copied', - desc: '', - args: [], - ); + return Intl.message('cкопирован', name: 'copied', desc: '', args: []); } /// `В черновик` String get to_draft { - return Intl.message( - 'В черновик', - name: 'to_draft', - desc: '', - args: [], - ); + return Intl.message('В черновик', name: 'to_draft', desc: '', args: []); } /// `Превью` String get preview { - return Intl.message( - 'Превью', - name: 'preview', - desc: '', - args: [], - ); + return Intl.message('Превью', name: 'preview', desc: '', args: []); } /// `Опубликовать` String get publish { - return Intl.message( - 'Опубликовать', - name: 'publish', - desc: '', - args: [], - ); + return Intl.message('Опубликовать', name: 'publish', desc: '', args: []); } /// `Добавление плана` @@ -1672,12 +1277,7 @@ class S { /// `Название` String get label { - return Intl.message( - 'Название', - name: 'label', - desc: '', - args: [], - ); + return Intl.message('Название', name: 'label', desc: '', args: []); } /// `План для поддержания формы` @@ -1702,22 +1302,12 @@ class S { /// `Похудение` String get slim { - return Intl.message( - 'Похудение', - name: 'slim', - desc: '', - args: [], - ); + return Intl.message('Похудение', name: 'slim', desc: '', args: []); } /// `Поддержка формы` String get fitness { - return Intl.message( - 'Поддержка формы', - name: 'fitness', - desc: '', - args: [], - ); + return Intl.message('Поддержка формы', name: 'fitness', desc: '', args: []); } /// `Улучшение самочувствия` @@ -1772,72 +1362,37 @@ class S { /// `1 опция` String get one_option { - return Intl.message( - '1 опция', - name: 'one_option', - desc: '', - args: [], - ); + return Intl.message('1 опция', name: 'one_option', desc: '', args: []); } /// `3 опции` String get three_options { - return Intl.message( - '3 опции', - name: 'three_options', - desc: '', - args: [], - ); + return Intl.message('3 опции', name: 'three_options', desc: '', args: []); } /// `Опция` String get option { - return Intl.message( - 'Опция', - name: 'option', - desc: '', - args: [], - ); + return Intl.message('Опция', name: 'option', desc: '', args: []); } /// `Оказание услуг` String get services { - return Intl.message( - 'Оказание услуг', - name: 'services', - desc: '', - args: [], - ); + return Intl.message('Оказание услуг', name: 'services', desc: '', args: []); } /// `Эконом` String get economy { - return Intl.message( - 'Эконом', - name: 'economy', - desc: '', - args: [], - ); + return Intl.message('Эконом', name: 'economy', desc: '', args: []); } /// `Стандарт` String get standard { - return Intl.message( - 'Стандарт', - name: 'standard', - desc: '', - args: [], - ); + return Intl.message('Стандарт', name: 'standard', desc: '', args: []); } /// `Комфорт` String get comfort { - return Intl.message( - 'Комфорт', - name: 'comfort', - desc: '', - args: [], - ); + return Intl.message('Комфорт', name: 'comfort', desc: '', args: []); } /// `Заголовок опции` @@ -1952,12 +1507,7 @@ class S { /// `Автор плана` String get plan_author { - return Intl.message( - 'Автор плана', - name: 'plan_author', - desc: '', - args: [], - ); + return Intl.message('Автор плана', name: 'plan_author', desc: '', args: []); } /// `Продолжительность опции` @@ -1992,12 +1542,7 @@ class S { /// `Похудение` String get slim_type { - return Intl.message( - 'Похудение', - name: 'slim_type', - desc: '', - args: [], - ); + return Intl.message('Похудение', name: 'slim_type', desc: '', args: []); } /// `План питания для похудения должен быть разработан с учётом индивидуальных особенностей организма, возраста, пола, уровня физической активности и состояния здоровья. Общие принципы: \n● Снижение калорийности; \n● Сбалансированный рацион; \n● Разнообразие продуктов; \n● Питьевой режим; \n● Ограничение вредных продуктов;` @@ -2052,22 +1597,12 @@ class S { /// `Цена` String get price { - return Intl.message( - 'Цена', - name: 'price', - desc: '', - args: [], - ); + return Intl.message('Цена', name: 'price', desc: '', args: []); } /// `Мои диеты` String get my_diets { - return Intl.message( - 'Мои диеты', - name: 'my_diets', - desc: '', - args: [], - ); + return Intl.message('Мои диеты', name: 'my_diets', desc: '', args: []); } /// `Опубликованные` @@ -2082,42 +1617,22 @@ class S { /// `Черновики` String get drafted { - return Intl.message( - 'Черновики', - name: 'drafted', - desc: '', - args: [], - ); + return Intl.message('Черновики', name: 'drafted', desc: '', args: []); } /// `Персональные` String get personal { - return Intl.message( - 'Персональные', - name: 'personal', - desc: '', - args: [], - ); + return Intl.message('Персональные', name: 'personal', desc: '', args: []); } /// `Редактировать` String get edit { - return Intl.message( - 'Редактировать', - name: 'edit', - desc: '', - args: [], - ); + return Intl.message('Редактировать', name: 'edit', desc: '', args: []); } /// `Предложить` String get toOffer { - return Intl.message( - 'Предложить', - name: 'toOffer', - desc: '', - args: [], - ); + return Intl.message('Предложить', name: 'toOffer', desc: '', args: []); } /// `Снять с публикации` @@ -2132,42 +1647,22 @@ class S { /// `Диета` String get diet { - return Intl.message( - 'Диета', - name: 'diet', - desc: '', - args: [], - ); + return Intl.message('Диета', name: 'diet', desc: '', args: []); } /// `Удалена` String get deleted { - return Intl.message( - 'Удалена', - name: 'deleted', - desc: '', - args: [], - ); + return Intl.message('Удалена', name: 'deleted', desc: '', args: []); } /// `Мои планы` String get my_plans { - return Intl.message( - 'Мои планы', - name: 'my_plans', - desc: '', - args: [], - ); + return Intl.message('Мои планы', name: 'my_plans', desc: '', args: []); } /// `от` String get from { - return Intl.message( - 'от', - name: 'from', - desc: '', - args: [], - ); + return Intl.message('от', name: 'from', desc: '', args: []); } /// `Данные пользователя` @@ -2192,12 +1687,7 @@ class S { /// `Пол` String get sex { - return Intl.message( - 'Пол', - name: 'sex', - desc: '', - args: [], - ); + return Intl.message('Пол', name: 'sex', desc: '', args: []); } /// `Физическая форма` @@ -2212,42 +1702,22 @@ class S { /// `Рост` String get height { - return Intl.message( - 'Рост', - name: 'height', - desc: '', - args: [], - ); + return Intl.message('Рост', name: 'height', desc: '', args: []); } /// `Давление` String get pressure { - return Intl.message( - 'Давление', - name: 'pressure', - desc: '', - args: [], - ); + return Intl.message('Давление', name: 'pressure', desc: '', args: []); } /// `Верхнее` String get upper { - return Intl.message( - 'Верхнее', - name: 'upper', - desc: '', - args: [], - ); + return Intl.message('Верхнее', name: 'upper', desc: '', args: []); } /// `Нижнее` String get lower { - return Intl.message( - 'Нижнее', - name: 'lower', - desc: '', - args: [], - ); + return Intl.message('Нижнее', name: 'lower', desc: '', args: []); } /// `Склонность к гипотонии` diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index af6cf693..3fb9e4f4 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -1,6 +1,6 @@ { "user_registration": "Регистрация пользователя", - "email": "Элетронная почта", + "email": "Электронная почта", "username": "Имя пользователя", "password": "Пароль", "password_confirmation": "Подтвердите пароль", @@ -33,7 +33,7 @@ "average_pressure": "Средние показатели давления:", "up_pressure": "Верхние показатели давления:", "down_pressure": "Нижние показатели давления:", - "do_you_have_hypotension_tendency": "Есть ли у вас гипотония?", + "do_you_have_hypotension_tendency": "Есть ли у вас гипотония?", "your_favorite_sports": "Ваши спортивные увлечения?", "favorite_foods": "Любимые продукты", "favorite_unfavorite_foods": "Ваши любимые/нелюбимые продукты питания?", diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb index a1d3cd53..ad9760c6 100644 --- a/lib/l10n/intl_ru.arb +++ b/lib/l10n/intl_ru.arb @@ -1,6 +1,6 @@ { "user_registration": "Регистрация пользователя", - "email": "Элетронная почта", + "email": "Электронная почта", "username": "Имя пользователя", "password": "Пароль", "password_confirmation": "Подтвердите пароль", @@ -33,7 +33,7 @@ "average_pressure": "Средние показатели давления:", "up_pressure": "Верхние показатели давления:", "down_pressure": "Нижние показатели давления:", - "do_you_have_hypotension_tendency": "Есть ли у вас гипотония?", + "do_you_have_hypotension_tendency": "Есть ли у вас гипотония?", "your_favorite_sports": "Ваши спортивные увлечения?", "favorite_foods": "Любимые продукты", "favorite_unfavorite_foods": "Ваши любимые/нелюбимые продукты питания?", diff --git a/pubspec.yaml b/pubspec.yaml index 5ea11531..9ff64948 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,8 +13,8 @@ dependencies: flutter_localizations: sdk: flutter - flutter_secure_storage: ^9.2.3 - flutter_bloc: ^8.1.6 + flutter_secure_storage: ^9.2.4 + flutter_bloc: ^9.0.0 cached_network_image: ^3.4.1 flutter_svg: ^2.0.17 equatable: ^2.0.7 @@ -23,10 +23,10 @@ dependencies: validators: ^3.0.0 path_provider: ^2.1.5 carousel_slider_plus: ^7.1.0 - flutter_form_builder: ^10.0.0-dev.1 + flutter_form_builder: ^7.0.0-alpha.3 image_picker: ^1.1.2 flutter_typeahead: ^5.2.0 - go_router: ^14.6.3 + go_router: ^14.7.1 keyboard_dismisser: ^3.0.0 retrofit: ^4.4.2 get_it: ^8.0.3 @@ -40,36 +40,40 @@ dependencies: google_fonts: ^6.2.1 syncfusion_flutter_charts: ^28.1.38 syncfusion_flutter_gauges: ^28.1.38 - table_calendar: ^3.1.3 + table_calendar: ^3.2.0 flutter_keyboard_visibility: ^6.0.0 share_plus: ^10.1.4 flutter_html: ^3.0.0-beta.2 file_picker: ^8.1.7 audioplayers: ^6.1.0 - intl: ^0.19.0 + intl: ^0.20.2 rive: ^0.13.20 mask_text_input_formatter: ^2.9.0 - lottie: ^3.3.0 + lottie: ^3.3.1 flutter_portal: ^1.1.4 fluttertoast: ^8.2.10 flutter_rating_bar: ^4.0.1 flutter_image_compress: ^2.4.0 - image: ^4.3.0 + image: ^4.5.2 dotted_border: ^2.1.0 - http: ^1.2.2 + http: ^1.3.0 flutter_native_splash: ^2.4.4 + webview_flutter: ^4.10.0 connectivity_plus: ^6.1.2 dev_dependencies: build_runner: ^2.4.14 - freezed: ^2.5.7 - json_serializable: ^6.9.0 - retrofit_generator: ^9.1.5 - mockito: ^5.4.4 + freezed: ^2.5.8 + json_serializable: ^6.9.3 + retrofit_generator: ^9.1.7 + mockito: ^5.4.5 flutter_test: sdk: flutter +dependency_overrides: + intl: 0.19.0 + flutter: uses-material-design: true assets: diff --git a/test/features/profile/services/profile_service_test.mocks.dart b/test/features/profile/services/profile_service_test.mocks.dart index 194ed8b5..9680c015 100644 --- a/test/features/profile/services/profile_service_test.mocks.dart +++ b/test/features/profile/services/profile_service_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.4.4 from annotations +// Mocks generated by Mockito 5.4.5 from annotations // in eatvio_app/test/features/profile/services/profile_service_test.dart. // Do not manually edit this file. @@ -27,52 +27,33 @@ import 'package:mockito/mockito.dart' as _i1; // ignore_for_file: deprecated_member_use_from_same_package // ignore_for_file: implementation_imports // ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable // ignore_for_file: prefer_const_constructors // ignore_for_file: unnecessary_parenthesis // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class class _FakeProfileModel_0 extends _i1.SmartFake implements _i2.ProfileModel { - _FakeProfileModel_0( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); + _FakeProfileModel_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } class _FakeProfileDetailsModel_1 extends _i1.SmartFake implements _i2.ProfileDetailsModel { - _FakeProfileDetailsModel_1( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); + _FakeProfileDetailsModel_1(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } class _FakeSubPaginationModel_2 extends _i1.SmartFake implements _i3.SubPaginationModel { - _FakeSubPaginationModel_2( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); + _FakeSubPaginationModel_2(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } class _FakeChosenDietsPaginationModel_3 extends _i1.SmartFake implements _i4.ChosenDietsPaginationModel { - _FakeChosenDietsPaginationModel_3( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); + _FakeChosenDietsPaginationModel_3(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } /// A class which mocks [ProfileService]. @@ -82,106 +63,78 @@ class MockProfileService extends _i1.Mock implements _i5.ProfileService { @override _i6.Future<_i2.ProfileModel> getProfileBySlug({required String? slug}) => (super.noSuchMethod( - Invocation.method( - #getProfileBySlug, - [], - {#slug: slug}, - ), - returnValue: _i6.Future<_i2.ProfileModel>.value(_FakeProfileModel_0( - this, - Invocation.method( - #getProfileBySlug, - [], - {#slug: slug}, - ), - )), - returnValueForMissingStub: - _i6.Future<_i2.ProfileModel>.value(_FakeProfileModel_0( - this, - Invocation.method( - #getProfileBySlug, - [], - {#slug: slug}, - ), - )), - ) as _i6.Future<_i2.ProfileModel>); + Invocation.method(#getProfileBySlug, [], {#slug: slug}), + returnValue: _i6.Future<_i2.ProfileModel>.value( + _FakeProfileModel_0( + this, + Invocation.method(#getProfileBySlug, [], {#slug: slug}), + ), + ), + returnValueForMissingStub: _i6.Future<_i2.ProfileModel>.value( + _FakeProfileModel_0( + this, + Invocation.method(#getProfileBySlug, [], {#slug: slug}), + ), + ), + ) + as _i6.Future<_i2.ProfileModel>); @override - _i6.Future<_i2.ProfileModel> getMyProfile() => (super.noSuchMethod( - Invocation.method( - #getMyProfile, - [], - ), - returnValue: _i6.Future<_i2.ProfileModel>.value(_FakeProfileModel_0( - this, - Invocation.method( - #getMyProfile, - [], - ), - )), - returnValueForMissingStub: - _i6.Future<_i2.ProfileModel>.value(_FakeProfileModel_0( - this, - Invocation.method( - #getMyProfile, - [], - ), - )), - ) as _i6.Future<_i2.ProfileModel>); + _i6.Future<_i2.ProfileModel> getMyProfile() => + (super.noSuchMethod( + Invocation.method(#getMyProfile, []), + returnValue: _i6.Future<_i2.ProfileModel>.value( + _FakeProfileModel_0(this, Invocation.method(#getMyProfile, [])), + ), + returnValueForMissingStub: _i6.Future<_i2.ProfileModel>.value( + _FakeProfileModel_0(this, Invocation.method(#getMyProfile, [])), + ), + ) + as _i6.Future<_i2.ProfileModel>); @override _i6.Future<_i2.ProfileDetailsModel> getMyProfileDetails() => (super.noSuchMethod( - Invocation.method( - #getMyProfileDetails, - [], - ), - returnValue: _i6.Future<_i2.ProfileDetailsModel>.value( - _FakeProfileDetailsModel_1( - this, - Invocation.method( - #getMyProfileDetails, - [], - ), - )), - returnValueForMissingStub: _i6.Future<_i2.ProfileDetailsModel>.value( - _FakeProfileDetailsModel_1( - this, - Invocation.method( - #getMyProfileDetails, - [], - ), - )), - ) as _i6.Future<_i2.ProfileDetailsModel>); + Invocation.method(#getMyProfileDetails, []), + returnValue: _i6.Future<_i2.ProfileDetailsModel>.value( + _FakeProfileDetailsModel_1( + this, + Invocation.method(#getMyProfileDetails, []), + ), + ), + returnValueForMissingStub: + _i6.Future<_i2.ProfileDetailsModel>.value( + _FakeProfileDetailsModel_1( + this, + Invocation.method(#getMyProfileDetails, []), + ), + ), + ) + as _i6.Future<_i2.ProfileDetailsModel>); @override - _i6.Future<_i2.ProfileDetailsModel> getProfileDetailsBySlug( - {required String? slug}) => + _i6.Future<_i2.ProfileDetailsModel> getProfileDetailsBySlug({ + required String? slug, + }) => (super.noSuchMethod( - Invocation.method( - #getProfileDetailsBySlug, - [], - {#slug: slug}, - ), - returnValue: _i6.Future<_i2.ProfileDetailsModel>.value( - _FakeProfileDetailsModel_1( - this, - Invocation.method( - #getProfileDetailsBySlug, - [], - {#slug: slug}, - ), - )), - returnValueForMissingStub: _i6.Future<_i2.ProfileDetailsModel>.value( - _FakeProfileDetailsModel_1( - this, - Invocation.method( - #getProfileDetailsBySlug, - [], - {#slug: slug}, - ), - )), - ) as _i6.Future<_i2.ProfileDetailsModel>); + Invocation.method(#getProfileDetailsBySlug, [], {#slug: slug}), + returnValue: _i6.Future<_i2.ProfileDetailsModel>.value( + _FakeProfileDetailsModel_1( + this, + Invocation.method(#getProfileDetailsBySlug, [], {#slug: slug}), + ), + ), + returnValueForMissingStub: + _i6.Future<_i2.ProfileDetailsModel>.value( + _FakeProfileDetailsModel_1( + this, + Invocation.method(#getProfileDetailsBySlug, [], { + #slug: slug, + }), + ), + ), + ) + as _i6.Future<_i2.ProfileDetailsModel>); @override _i6.Future addCircumference({ @@ -190,59 +143,53 @@ class MockProfileService extends _i1.Mock implements _i5.ProfileService { required int? hipCircumference, }) => (super.noSuchMethod( - Invocation.method( - #addCircumference, - [], - { - #chestCircumference: chestCircumference, - #waistCircumference: waistCircumference, - #hipCircumference: hipCircumference, - }, - ), - returnValue: _i6.Future.value(), - returnValueForMissingStub: _i6.Future.value(), - ) as _i6.Future); + Invocation.method(#addCircumference, [], { + #chestCircumference: chestCircumference, + #waistCircumference: waistCircumference, + #hipCircumference: hipCircumference, + }), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) + as _i6.Future); @override - _i6.Future addWeight({required double? weight}) => (super.noSuchMethod( - Invocation.method( - #addWeight, - [], - {#weight: weight}, - ), - returnValue: _i6.Future.value(), - returnValueForMissingStub: _i6.Future.value(), - ) as _i6.Future); - - @override - _i6.Future> getBlogPostByAuthorSlug( - {required String? slug}) => + _i6.Future addWeight({required double? weight}) => (super.noSuchMethod( - Invocation.method( - #getBlogPostByAuthorSlug, - [], - {#slug: slug}, - ), - returnValue: _i6.Future>.value( - <_i7.FeedBlogPostModel>[]), - returnValueForMissingStub: - _i6.Future>.value( - <_i7.FeedBlogPostModel>[]), - ) as _i6.Future>); + Invocation.method(#addWeight, [], {#weight: weight}), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) + as _i6.Future); + + @override + _i6.Future> getBlogPostByAuthorSlug({ + required String? slug, + }) => + (super.noSuchMethod( + Invocation.method(#getBlogPostByAuthorSlug, [], {#slug: slug}), + returnValue: _i6.Future>.value( + <_i7.FeedBlogPostModel>[], + ), + returnValueForMissingStub: + _i6.Future>.value( + <_i7.FeedBlogPostModel>[], + ), + ) + as _i6.Future>); @override _i6.Future> getWeight({required String? period}) => (super.noSuchMethod( - Invocation.method( - #getWeight, - [], - {#period: period}, - ), - returnValue: - _i6.Future>.value(<_i8.WeightModel>[]), - returnValueForMissingStub: - _i6.Future>.value(<_i8.WeightModel>[]), - ) as _i6.Future>); + Invocation.method(#getWeight, [], {#period: period}), + returnValue: _i6.Future>.value( + <_i8.WeightModel>[], + ), + returnValueForMissingStub: _i6.Future>.value( + <_i8.WeightModel>[], + ), + ) + as _i6.Future>); @override _i6.Future> getWeightBySlug({ @@ -250,35 +197,34 @@ class MockProfileService extends _i1.Mock implements _i5.ProfileService { required String? slug, }) => (super.noSuchMethod( - Invocation.method( - #getWeightBySlug, - [], - { - #period: period, - #slug: slug, - }, - ), - returnValue: - _i6.Future>.value(<_i8.WeightModel>[]), - returnValueForMissingStub: - _i6.Future>.value(<_i8.WeightModel>[]), - ) as _i6.Future>); + Invocation.method(#getWeightBySlug, [], { + #period: period, + #slug: slug, + }), + returnValue: _i6.Future>.value( + <_i8.WeightModel>[], + ), + returnValueForMissingStub: _i6.Future>.value( + <_i8.WeightModel>[], + ), + ) + as _i6.Future>); @override - _i6.Future> getCircumferences( - {required String? period}) => + _i6.Future> getCircumferences({ + required String? period, + }) => (super.noSuchMethod( - Invocation.method( - #getCircumferences, - [], - {#period: period}, - ), - returnValue: _i6.Future>.value( - <_i9.CircumferenceModel>[]), - returnValueForMissingStub: - _i6.Future>.value( - <_i9.CircumferenceModel>[]), - ) as _i6.Future>); + Invocation.method(#getCircumferences, [], {#period: period}), + returnValue: _i6.Future>.value( + <_i9.CircumferenceModel>[], + ), + returnValueForMissingStub: + _i6.Future>.value( + <_i9.CircumferenceModel>[], + ), + ) + as _i6.Future>); @override _i6.Future> getCircumferencesBySlug({ @@ -286,20 +232,19 @@ class MockProfileService extends _i1.Mock implements _i5.ProfileService { required String? slug, }) => (super.noSuchMethod( - Invocation.method( - #getCircumferencesBySlug, - [], - { - #period: period, - #slug: slug, - }, - ), - returnValue: _i6.Future>.value( - <_i9.CircumferenceModel>[]), - returnValueForMissingStub: - _i6.Future>.value( - <_i9.CircumferenceModel>[]), - ) as _i6.Future>); + Invocation.method(#getCircumferencesBySlug, [], { + #period: period, + #slug: slug, + }), + returnValue: _i6.Future>.value( + <_i9.CircumferenceModel>[], + ), + returnValueForMissingStub: + _i6.Future>.value( + <_i9.CircumferenceModel>[], + ), + ) + as _i6.Future>); @override _i6.Future<_i3.SubPaginationModel> getSubscribers({ @@ -307,39 +252,30 @@ class MockProfileService extends _i1.Mock implements _i5.ProfileService { String? query, }) => (super.noSuchMethod( - Invocation.method( - #getSubscribers, - [], - { - #slug: slug, - #query: query, - }, - ), - returnValue: - _i6.Future<_i3.SubPaginationModel>.value(_FakeSubPaginationModel_2( - this, - Invocation.method( - #getSubscribers, - [], - { + Invocation.method(#getSubscribers, [], { #slug: slug, #query: query, - }, - ), - )), - returnValueForMissingStub: - _i6.Future<_i3.SubPaginationModel>.value(_FakeSubPaginationModel_2( - this, - Invocation.method( - #getSubscribers, - [], - { - #slug: slug, - #query: query, - }, - ), - )), - ) as _i6.Future<_i3.SubPaginationModel>); + }), + returnValue: _i6.Future<_i3.SubPaginationModel>.value( + _FakeSubPaginationModel_2( + this, + Invocation.method(#getSubscribers, [], { + #slug: slug, + #query: query, + }), + ), + ), + returnValueForMissingStub: _i6.Future<_i3.SubPaginationModel>.value( + _FakeSubPaginationModel_2( + this, + Invocation.method(#getSubscribers, [], { + #slug: slug, + #query: query, + }), + ), + ), + ) + as _i6.Future<_i3.SubPaginationModel>); @override _i6.Future<_i3.SubPaginationModel> getSubscriptions({ @@ -347,107 +283,84 @@ class MockProfileService extends _i1.Mock implements _i5.ProfileService { String? query, }) => (super.noSuchMethod( - Invocation.method( - #getSubscriptions, - [], - { - #slug: slug, - #query: query, - }, - ), - returnValue: - _i6.Future<_i3.SubPaginationModel>.value(_FakeSubPaginationModel_2( - this, - Invocation.method( - #getSubscriptions, - [], - { + Invocation.method(#getSubscriptions, [], { #slug: slug, #query: query, - }, - ), - )), - returnValueForMissingStub: - _i6.Future<_i3.SubPaginationModel>.value(_FakeSubPaginationModel_2( - this, - Invocation.method( - #getSubscriptions, - [], - { - #slug: slug, - #query: query, - }, - ), - )), - ) as _i6.Future<_i3.SubPaginationModel>); + }), + returnValue: _i6.Future<_i3.SubPaginationModel>.value( + _FakeSubPaginationModel_2( + this, + Invocation.method(#getSubscriptions, [], { + #slug: slug, + #query: query, + }), + ), + ), + returnValueForMissingStub: _i6.Future<_i3.SubPaginationModel>.value( + _FakeSubPaginationModel_2( + this, + Invocation.method(#getSubscriptions, [], { + #slug: slug, + #query: query, + }), + ), + ), + ) + as _i6.Future<_i3.SubPaginationModel>); @override - _i6.Future subscribe({required String? slug}) => (super.noSuchMethod( - Invocation.method( - #subscribe, - [], - {#slug: slug}, - ), - returnValue: _i6.Future.value(), - returnValueForMissingStub: _i6.Future.value(), - ) as _i6.Future); + _i6.Future subscribe({required String? slug}) => + (super.noSuchMethod( + Invocation.method(#subscribe, [], {#slug: slug}), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) + as _i6.Future); @override - _i6.Future unsubscribe({required String? slug}) => (super.noSuchMethod( - Invocation.method( - #unsubscribe, - [], - {#slug: slug}, - ), - returnValue: _i6.Future.value(), - returnValueForMissingStub: _i6.Future.value(), - ) as _i6.Future); + _i6.Future unsubscribe({required String? slug}) => + (super.noSuchMethod( + Invocation.method(#unsubscribe, [], {#slug: slug}), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) + as _i6.Future); @override _i6.Future uploadPhoto({required _i10.File? photo}) => (super.noSuchMethod( - Invocation.method( - #uploadPhoto, - [], - {#photo: photo}, - ), - returnValue: _i6.Future.value(), - returnValueForMissingStub: _i6.Future.value(), - ) as _i6.Future); + Invocation.method(#uploadPhoto, [], {#photo: photo}), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) + as _i6.Future); @override - _i6.Future deletePhoto() => (super.noSuchMethod( - Invocation.method( - #deletePhoto, - [], - ), - returnValue: _i6.Future.value(), - returnValueForMissingStub: _i6.Future.value(), - ) as _i6.Future); + _i6.Future deletePhoto() => + (super.noSuchMethod( + Invocation.method(#deletePhoto, []), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) + as _i6.Future); @override _i6.Future<_i4.ChosenDietsPaginationModel> getChosenDiets() => (super.noSuchMethod( - Invocation.method( - #getChosenDiets, - [], - ), - returnValue: _i6.Future<_i4.ChosenDietsPaginationModel>.value( - _FakeChosenDietsPaginationModel_3( - this, - Invocation.method( - #getChosenDiets, - [], - ), - )), - returnValueForMissingStub: - _i6.Future<_i4.ChosenDietsPaginationModel>.value( - _FakeChosenDietsPaginationModel_3( - this, - Invocation.method( - #getChosenDiets, - [], - ), - )), - ) as _i6.Future<_i4.ChosenDietsPaginationModel>); + Invocation.method(#getChosenDiets, []), + returnValue: _i6.Future<_i4.ChosenDietsPaginationModel>.value( + _FakeChosenDietsPaginationModel_3( + this, + Invocation.method(#getChosenDiets, []), + ), + ), + returnValueForMissingStub: + _i6.Future<_i4.ChosenDietsPaginationModel>.value( + _FakeChosenDietsPaginationModel_3( + this, + Invocation.method(#getChosenDiets, []), + ), + ), + ) + as _i6.Future<_i4.ChosenDietsPaginationModel>); }