diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml
index a6d70a2a..acedcf72 100644
--- a/.gitea/workflows/build.yml
+++ b/.gitea/workflows/build.yml
@@ -3,7 +3,7 @@ name: Eatvio App Android Test
on: [ pull_request ]
env:
- flutter_version: "3.24.5"
+ flutter_version: "3.27.0"
java_version: "21.x"
flutter_channel: "stable"
diff --git a/.gitea/workflows/docker-run-tests.yml b/.gitea/workflows/docker-run-tests.yml
index 99cc866e..52b8e53c 100644
--- a/.gitea/workflows/docker-run-tests.yml
+++ b/.gitea/workflows/docker-run-tests.yml
@@ -3,7 +3,7 @@ name: Eatvio App Android Test on custom docker
on: [ pull_request ]
env:
- flutter_version: "3.24.5"
+ flutter_version: "3.27.0"
java_version: "21.x"
flutter_channel: "stable"
my_local_cache_dir: "/opt/hostedtoolcache/"
diff --git a/.gitea/workflows/test.yml b/.gitea/workflows/test.yml
index bd6cf419..eac84bf6 100644
--- a/.gitea/workflows/test.yml
+++ b/.gitea/workflows/test.yml
@@ -3,7 +3,7 @@ name: Eatvio App Android Test
on: [ pull_request ]
env:
- flutter_version: "3.24.5"
+ flutter_version: "3.27.0"
java_version: "21.x"
flutter_channel: "stable"
my_local_cache_dir: "/opt/hostedtoolcache/"
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 46a74368..ffffdd77 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -10,12 +10,12 @@ android {
ndkVersion = "25.1.8937393"
compileOptions {
- sourceCompatibility = JavaVersion.VERSION_1_8
- targetCompatibility = JavaVersion.VERSION_1_8
+ sourceCompatibility = JavaVersion.VERSION_21
+ targetCompatibility = JavaVersion.VERSION_21
}
kotlinOptions {
- jvmTarget = JavaVersion.VERSION_1_8
+ jvmTarget = 21
}
defaultConfig {
diff --git a/assets/icons/calories.svg b/assets/icons/calories.svg
new file mode 100644
index 00000000..56188edf
--- /dev/null
+++ b/assets/icons/calories.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/clock.svg b/assets/icons/clock.svg
new file mode 100644
index 00000000..f11f885b
--- /dev/null
+++ b/assets/icons/clock.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/steps.svg b/assets/icons/steps.svg
new file mode 100644
index 00000000..45c8cb6a
--- /dev/null
+++ b/assets/icons/steps.svg
@@ -0,0 +1,3 @@
+
diff --git a/lib/core/theme/app_decoration.dart b/lib/core/theme/app_decoration.dart
index eb2c4372..528abdfb 100644
--- a/lib/core/theme/app_decoration.dart
+++ b/lib/core/theme/app_decoration.dart
@@ -25,7 +25,7 @@ class AppDecoration {
);
static BoxDecoration get fillDeepOrange => BoxDecoration(
- color: appTheme.deepOrange900.withOpacity(0.8),
+ color: appTheme.deepOrange900.withValues(alpha: 0.8),
);
static BoxDecoration get fillGray => BoxDecoration(
@@ -41,7 +41,7 @@ class AppDecoration {
);
static BoxDecoration get fillGreenA => BoxDecoration(
- color: appTheme.greenA700.withOpacity(0.8),
+ color: appTheme.greenA700.withValues(alpha: 0.8),
);
static BoxDecoration get fillPrimary => BoxDecoration(
@@ -77,7 +77,7 @@ class BorderRadiusStyle {
color: appTheme.whiteA700,
boxShadow: [
BoxShadow(
- color: appTheme.black900.withOpacity(0.15),
+ color: appTheme.black900.withValues(alpha: 0.15),
spreadRadius: 2,
blurRadius: 2,
offset: Offset(
diff --git a/lib/core/theme/theme_helper.dart b/lib/core/theme/theme_helper.dart
index ab7d7377..615e33df 100644
--- a/lib/core/theme/theme_helper.dart
+++ b/lib/core/theme/theme_helper.dart
@@ -175,7 +175,7 @@ class PrimaryColors {
Color get lightGray => Color(0xFFCECECE);
- Color get transparentBlue => Color(0xFF2F80ED).withOpacity(0.1);
+ Color get transparentBlue => Color(0xFF2F80ED).withValues(alpha: 0.1);
Color get lightGray0 => Color(0xFFF6F6F6);
@@ -185,7 +185,7 @@ class PrimaryColors {
Color get red => Color(0xFFCD4141);
- Color get transparentBlack => Color(0xFF1313264).withOpacity(0.3);
+ Color get transparentBlack => Color(0xFF1313264).withValues(alpha: 0.3);
}
PrimaryColors get appTheme => ThemeHelper().themeColor();
diff --git a/lib/core/widgets/main_background_bouble.dart b/lib/core/widgets/main_background_bouble.dart
index a901ecad..0f1a9fe9 100644
--- a/lib/core/widgets/main_background_bouble.dart
+++ b/lib/core/widgets/main_background_bouble.dart
@@ -23,7 +23,7 @@ class MainBackgroundBouble extends StatelessWidget {
boxShadow: enableShadow
? [
BoxShadow(
- color: Color(0x00000000).withOpacity(0.2),
+ color: Color(0x00000000).withValues(alpha: 0.2),
spreadRadius: 0,
blurRadius: 32,
offset: Offset(0, 0),
diff --git a/lib/features/blog_post/presentation/pages/blog_post_screen.dart b/lib/features/blog_post/presentation/pages/blog_post_screen.dart
index 3f88ece9..ddb4ddc5 100644
--- a/lib/features/blog_post/presentation/pages/blog_post_screen.dart
+++ b/lib/features/blog_post/presentation/pages/blog_post_screen.dart
@@ -69,7 +69,7 @@ class _BlogPostScreenState extends State {
color: Colors.white,
border: Border(
top: BorderSide(
- color: Colors.black.withOpacity(0.1),
+ color: Colors.black.withValues(alpha: 0.1),
),
),
),
@@ -293,9 +293,9 @@ class _BlogPostScreenState extends State {
_iconButton(
icon: Icons.favorite_border_rounded,
text: totalLikes.toString(),
- iconColor: isLiked ? Colors.red.withOpacity(0.8) : null,
- backgroundColor: isLiked ? Colors.red.withOpacity(0.1) : null,
- textColor: isLiked ? Colors.red.withOpacity(0.8) : null,
+ 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;
@@ -338,7 +338,7 @@ class _BlogPostScreenState extends State {
width: MediaQuery.of(context).size.width - 32,
height: 0.4,
decoration: BoxDecoration(
- color: Colors.black.withOpacity(0.2),
+ color: Colors.black.withValues(alpha: 0.2),
borderRadius: BorderRadius.circular(16),
),
),
diff --git a/lib/features/chat/presentation/pages/chat_screen.dart b/lib/features/chat/presentation/pages/chat_screen.dart
index d43411cb..0a6d1b5a 100644
--- a/lib/features/chat/presentation/pages/chat_screen.dart
+++ b/lib/features/chat/presentation/pages/chat_screen.dart
@@ -184,7 +184,7 @@ class _ChatScreenState extends State {
decoration: BoxDecoration(
border: Border(
top: BorderSide(
- color: Colors.black.withOpacity(0.1),
+ color: Colors.black.withValues(alpha: 0.1),
),
),
),
diff --git a/lib/features/chat/presentation/widgets/chat_bubble_widget.dart b/lib/features/chat/presentation/widgets/chat_bubble_widget.dart
index 79e3269a..8ef43e8b 100644
--- a/lib/features/chat/presentation/widgets/chat_bubble_widget.dart
+++ b/lib/features/chat/presentation/widgets/chat_bubble_widget.dart
@@ -116,7 +116,7 @@ class ChatBubbleWidget extends StatelessWidget {
child: Text(
DateTime.parse(sendTime).format('hh:mm'),
style: TextStyle(
- color: isCurrentUser ? Colors.white.withOpacity(0.4) : Color(0xFF323F4B).withOpacity(0.4),
+ color: isCurrentUser ? Colors.white.withValues(alpha: 0.4) : Color(0xFF323F4B).withValues(alpha: 0.4),
height: 1,
fontSize: 10,
),
diff --git a/lib/features/consultant/become_consultant/presentation/pages/additional_settings_screen.dart b/lib/features/consultant/become_consultant/presentation/pages/additional_settings_screen.dart
index da799a5e..c7049bff 100644
--- a/lib/features/consultant/become_consultant/presentation/pages/additional_settings_screen.dart
+++ b/lib/features/consultant/become_consultant/presentation/pages/additional_settings_screen.dart
@@ -94,7 +94,7 @@ class _AdditionalSettingsScreenState extends State {
),
trailing: CupertinoSwitch(
value: value,
- activeColor: appTheme.blueA400,
+ activeTrackColor: appTheme.blueA400,
onChanged: (_) {
onTap();
},
diff --git a/lib/features/create_diet/presentation/diet_preview_screen.dart b/lib/features/create_diet/presentation/diet_preview_screen.dart
index 4680f763..f06c247e 100644
--- a/lib/features/create_diet/presentation/diet_preview_screen.dart
+++ b/lib/features/create_diet/presentation/diet_preview_screen.dart
@@ -66,7 +66,7 @@ class _DietPreviewScreenState extends State {
color: Colors.white,
border: Border(
top: BorderSide(
- color: Colors.black.withOpacity(0.1),
+ color: Colors.black.withValues(alpha: 0.1),
),
),
),
diff --git a/lib/features/diary/presentation/widgets/add_product_modal.dart b/lib/features/diary/presentation/widgets/add_product_modal.dart
index 65852357..563beeb4 100644
--- a/lib/features/diary/presentation/widgets/add_product_modal.dart
+++ b/lib/features/diary/presentation/widgets/add_product_modal.dart
@@ -154,7 +154,7 @@ class _AddProductModalState extends State {
),
),
trailing: Icon(
- Icons.keyboard_arrow_right_rounded,
+ Icons.add_rounded,
color: Colors.grey.shade400,
),
contentPadding: EdgeInsets.only(left: 12),
diff --git a/lib/features/diets/presentation/pages/about_diet_screen.dart b/lib/features/diets/presentation/pages/about_diet_screen.dart
index 0ff130b0..8e84e933 100644
--- a/lib/features/diets/presentation/pages/about_diet_screen.dart
+++ b/lib/features/diets/presentation/pages/about_diet_screen.dart
@@ -109,7 +109,7 @@ class _AboutDietScreenState extends State {
color: Colors.white,
border: Border(
top: BorderSide(
- color: Colors.black.withOpacity(0.1),
+ color: Colors.black.withValues(alpha: 0.1),
),
),
),
diff --git a/lib/features/feed/models/feed_blog_post_model.dart b/lib/features/feed/models/feed_blog_post_model.dart
index 69a1908d..88eddbaf 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") required int totalComments,
+ @JsonKey(name: "total_comments") 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 4b2ad476..2d1870b0 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 = null,
+ Object? totalComments = freezed,
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: null == totalComments
+ totalComments: freezed == 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 = null,
+ Object? totalComments = freezed,
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: null == totalComments
+ totalComments: freezed == 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") required this.totalComments,
+ @JsonKey(name: "total_comments") 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") required final int totalComments,
+ @JsonKey(name: "total_comments") 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 024d2b47..95da2b2b 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/widgets/blog_post_widget.dart b/lib/features/feed/presentation/widgets/blog_post_widget.dart
index 9805750d..4cb5c767 100644
--- a/lib/features/feed/presentation/widgets/blog_post_widget.dart
+++ b/lib/features/feed/presentation/widgets/blog_post_widget.dart
@@ -168,9 +168,9 @@ class _BlogPostWidgetState extends State {
FeedIconButton(
icon: isLiked ? Icons.favorite_rounded : Icons.favorite_border_rounded,
text: totalLikes.toString(),
- iconColor: isLiked ? Colors.red.withOpacity(0.8) : null,
- backgroundColor: isLiked ? Colors.red.withOpacity(0.1) : null,
- textColor: isLiked ? Colors.red.withOpacity(0.8) : null,
+ 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;
diff --git a/lib/features/feed/presentation/widgets/comments_widget.dart b/lib/features/feed/presentation/widgets/comments_widget.dart
index caf9c4ad..ac4ea977 100644
--- a/lib/features/feed/presentation/widgets/comments_widget.dart
+++ b/lib/features/feed/presentation/widgets/comments_widget.dart
@@ -50,7 +50,7 @@ class _CommentsWidgetState extends State {
return Container(
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
- color: widget.replyId == comment.id ? appTheme.blueA400.withOpacity(0.1) : Colors.white,
+ color: widget.replyId == comment.id ? appTheme.blueA400.withValues(alpha: 0.1) : Colors.white,
borderRadius: BorderRadius.circular(16),
),
child: Padding(
diff --git a/lib/features/feed/presentation/widgets/recipes_widget.dart b/lib/features/feed/presentation/widgets/recipes_widget.dart
index 9e93074b..eb4b065f 100644
--- a/lib/features/feed/presentation/widgets/recipes_widget.dart
+++ b/lib/features/feed/presentation/widgets/recipes_widget.dart
@@ -1,10 +1,15 @@
+// ignore_for_file: dead_code
+
import 'package:cached_network_image/cached_network_image.dart';
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:flutter/material.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 Recipes recipes;
@@ -46,72 +51,14 @@ class _RecipesWidgetState extends State {
child: Wrap(
runSpacing: 8,
children: [
- _iconButton(Icons.fastfood, '139.9 ккал'),
+ _iconButton('assets/icons/clock.svg', widget.recipes.cookingTime.toString() + ' минут'),
SizedBox(width: 8),
- _iconButton(Icons.timer_rounded, widget.recipes.cookingTime.toString() + ' минут'),
+ _iconButton('assets/icons/steps.svg', widget.recipes.steps.length.toString() + ' этапов'),
SizedBox(width: 8),
- _iconButton(Icons.fast_forward_rounded, widget.recipes.steps.length.toString() + ' этапов'),
+ _iconButton('assets/icons/calories.svg', '139.9 ккал'),
],
),
),
- Positioned(
- left: 8,
- top: 8,
- child: Container(
- padding: EdgeInsets.symmetric(horizontal: 8, vertical: 4),
- decoration: BoxDecoration(
- color: Colors.white.withOpacity(0.8),
- borderRadius: BorderRadius.circular(16),
- ),
- child: Row(
- children: [
- Icon(
- Icons.favorite_rounded,
- size: 16,
- color: Colors.black,
- ),
- SizedBox(width: 4),
- Text(
- '0',
- style: TextStyle(
- fontSize: 12,
- color: Colors.black,
- fontWeight: FontWeight.w400,
- ),
- ),
- ],
- ),
- ),
- ),
- Positioned(
- right: 8,
- top: 8,
- child: Container(
- padding: EdgeInsets.symmetric(horizontal: 8, vertical: 4),
- decoration: BoxDecoration(
- color: Colors.white.withOpacity(0.8),
- borderRadius: BorderRadius.circular(16),
- ),
- child: Row(
- children: [
- Icon(
- Icons.visibility_rounded,
- size: 16,
- color: Colors.black,
- ),
- SizedBox(width: 4),
- Text(
- '0',
- style: TextStyle(
- fontSize: 12,
- color: Colors.black,
- fontWeight: FontWeight.w400,
- ),
- ),
- ],
- ),
- ),
- ),
],
),
SizedBox(height: 12),
@@ -150,27 +97,96 @@ class _RecipesWidgetState extends State {
),
),
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,
+ ),
+ ),
+ 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: () => Share.shareUri(
+ Uri.parse(
+ baseUrl + '/ru/blog_post/' + widget.recipes.id.toString(),
+ ),
+ ),
+ ),
+ 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),
],
),
),
);
}
- _iconButton(IconData icon, [String? text]) {
+ _iconButton(String iconPath, [String? text]) {
return Container(
padding: EdgeInsets.symmetric(horizontal: 12, vertical: 4),
decoration: BoxDecoration(
- color: Colors.white.withOpacity(0.8),
+ color: Colors.white.withValues(alpha: 0.8),
borderRadius: BorderRadius.circular(16),
),
height: 32,
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
- Icon(
- icon,
- size: 16,
- color: Colors.black,
+ SvgPicture.asset(
+ iconPath,
),
if (text != null) SizedBox(width: 8),
if (text != null)
diff --git a/lib/features/plans/presentation/pages/about_plan_screen.dart b/lib/features/plans/presentation/pages/about_plan_screen.dart
index 3b6489ca..beed1eee 100644
--- a/lib/features/plans/presentation/pages/about_plan_screen.dart
+++ b/lib/features/plans/presentation/pages/about_plan_screen.dart
@@ -108,7 +108,7 @@ class _AboutPlanScreenState extends State {
color: Colors.white,
border: Border(
top: BorderSide(
- color: Colors.black.withOpacity(0.1),
+ color: Colors.black.withValues(alpha: 0.1),
),
),
),
diff --git a/lib/features/profile/presentation/pages/profile_screen.dart b/lib/features/profile/presentation/pages/profile_screen.dart
index b6dff9b3..76831727 100644
--- a/lib/features/profile/presentation/pages/profile_screen.dart
+++ b/lib/features/profile/presentation/pages/profile_screen.dart
@@ -811,7 +811,7 @@ class _ProfileScreenState extends State {
child: Text(
text,
style: TextStyle(
- color: Colors.black.withOpacity(0.4),
+ color: Colors.black.withValues(alpha: 0.4),
height: 1,
),
),
@@ -1044,7 +1044,7 @@ class _ProfileScreenState extends State {
padding: EdgeInsets.all(8),
width: (MediaQuery.of(context).size.width - 40) / 2,
decoration: BoxDecoration(
- color: appTheme.blueA400.withOpacity(0.1),
+ color: appTheme.blueA400.withValues(alpha: 0.1),
borderRadius: BorderRadius.circular(16),
),
child: Text(
@@ -1150,7 +1150,7 @@ class _ProfileScreenState extends State {
_choiceIntervalChipWidget(int index) {
return ChoiceChip(
- selectedColor: Colors.grey.withOpacity(0.1),
+ selectedColor: Colors.grey.withValues(alpha: 0.1),
pressElevation: 0,
showCheckmark: false,
side: BorderSide.none,
diff --git a/lib/features/profile/presentation/widgets/circumference_chart_widget.dart b/lib/features/profile/presentation/widgets/circumference_chart_widget.dart
index f116ccf5..82130c54 100644
--- a/lib/features/profile/presentation/widgets/circumference_chart_widget.dart
+++ b/lib/features/profile/presentation/widgets/circumference_chart_widget.dart
@@ -154,9 +154,9 @@ class _CircumferenceChartWidgetState extends State {
labelStyle: TextStyle(
color: Colors.grey,
),
- majorGridLines: MajorGridLines(dashArray: [1], color: Colors.grey.withOpacity(0.3)),
+ majorGridLines: MajorGridLines(dashArray: [1], color: Colors.grey.withValues(alpha: 0.3)),
axisLine: AxisLine(
- color: Colors.grey.withOpacity(0.3),
+ color: Colors.grey.withValues(alpha: 0.3),
width: 0.4,
),
),
@@ -309,7 +309,7 @@ class _CircumferenceChartWidgetState extends State {
borderColor: seriesColor1,
gradient: LinearGradient(
colors: [
- seriesColor1.withOpacity(0.14),
+ seriesColor1.withValues(alpha: 0.14),
Colors.transparent,
],
begin: Alignment.topCenter,
@@ -334,7 +334,7 @@ class _CircumferenceChartWidgetState extends State {
borderColor: seriesColor2,
gradient: LinearGradient(
colors: [
- seriesColor2.withOpacity(0.14),
+ seriesColor2.withValues(alpha: 0.14),
Colors.transparent,
],
begin: Alignment.topCenter,
@@ -359,7 +359,7 @@ class _CircumferenceChartWidgetState extends State {
borderColor: seriesColor3,
gradient: LinearGradient(
colors: [
- seriesColor3.withOpacity(0.14),
+ seriesColor3.withValues(alpha: 0.14),
Colors.transparent,
],
begin: Alignment.topCenter,
diff --git a/lib/features/profile/presentation/widgets/imt_chart_widget.dart b/lib/features/profile/presentation/widgets/imt_chart_widget.dart
index d7264772..14dc3dee 100644
--- a/lib/features/profile/presentation/widgets/imt_chart_widget.dart
+++ b/lib/features/profile/presentation/widgets/imt_chart_widget.dart
@@ -22,14 +22,14 @@ class ImtChartWidget extends StatelessWidget {
child: Row(
children: [
if (weightPoints.length > 0)
- Text(
- '${weightPoints.last.bmi.toStringAsFixed(2)}',
- style: TextStyle(
- color: Colors.black,
- fontSize: 40,
- fontWeight: FontWeight.w500,
+ Text(
+ '${weightPoints.last.bmi.toStringAsFixed(2)}',
+ style: TextStyle(
+ color: Colors.black,
+ fontSize: 40,
+ fontWeight: FontWeight.w500,
+ ),
),
- ),
if (weightPoints.length > 1)
weightPoints.last.bmi > weightPoints[weightPoints.length - 2].bmi
? Icon(
@@ -66,9 +66,9 @@ class ImtChartWidget extends StatelessWidget {
labelStyle: TextStyle(
color: Colors.grey,
),
- majorGridLines: MajorGridLines(dashArray: [1], color: Colors.grey.withOpacity(0.3)),
+ majorGridLines: MajorGridLines(dashArray: [1], color: Colors.grey.withValues(alpha: 0.3)),
axisLine: AxisLine(
- color: Colors.grey.withOpacity(0.3),
+ color: Colors.grey.withValues(alpha: 0.3),
width: 0.4,
),
),
@@ -99,7 +99,7 @@ class ImtChartWidget extends StatelessWidget {
borderColor: appTheme.blueA400,
gradient: LinearGradient(
colors: [
- appTheme.blueA400.withOpacity(0.14),
+ appTheme.blueA400.withValues(alpha: 0.14),
Colors.transparent,
],
begin: Alignment.topCenter,
diff --git a/lib/features/profile/presentation/widgets/profile_blog_post_widget.dart b/lib/features/profile/presentation/widgets/profile_blog_post_widget.dart
index 6fcb4f40..a448ed10 100644
--- a/lib/features/profile/presentation/widgets/profile_blog_post_widget.dart
+++ b/lib/features/profile/presentation/widgets/profile_blog_post_widget.dart
@@ -166,9 +166,9 @@ class _ProfileBlogPostWidgetState extends State {
FeedIconButton(
icon: isLiked ? Icons.favorite_rounded : Icons.favorite_border_rounded,
text: totalLikes.toString(),
- iconColor: isLiked ? Colors.red.withOpacity(0.8) : null,
- backgroundColor: isLiked ? Colors.red.withOpacity(0.1) : null,
- textColor: isLiked ? Colors.red.withOpacity(0.8) : null,
+ 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;
@@ -178,9 +178,9 @@ class _ProfileBlogPostWidgetState extends State {
? await context.read().likePost(state.blogPosts[widget.index].id)
: await context.read().unlikedPost(state.blogPosts[widget.index].id);
await widget.profileCubit.updateFeedBlogPostList(
- state.blogPosts[widget.index],
- isLiked ? false : true,
- );
+ state.blogPosts[widget.index],
+ isLiked ? false : true,
+ );
},
),
SizedBox(width: 8),
diff --git a/lib/features/profile/presentation/widgets/weight_chart_widget.dart b/lib/features/profile/presentation/widgets/weight_chart_widget.dart
index 3cdfd930..082befe0 100644
--- a/lib/features/profile/presentation/widgets/weight_chart_widget.dart
+++ b/lib/features/profile/presentation/widgets/weight_chart_widget.dart
@@ -59,12 +59,12 @@ class _WeightChartWidgetState extends State {
? Icon(
Icons.arrow_drop_up,
size: 40,
- color: Colors.grey.withOpacity(0.4),
+ color: Colors.grey.withValues(alpha: 0.4),
)
: Icon(
Icons.arrow_drop_down,
size: 40,
- color: Colors.grey.withOpacity(0.4),
+ color: Colors.grey.withValues(alpha: 0.4),
),
],
),
@@ -93,9 +93,9 @@ class _WeightChartWidgetState extends State {
labelStyle: TextStyle(
color: Colors.grey,
),
- majorGridLines: MajorGridLines(dashArray: [1], color: Colors.grey.withOpacity(0.3)),
+ majorGridLines: MajorGridLines(dashArray: [1], color: Colors.grey.withValues(alpha: 0.3)),
axisLine: AxisLine(
- color: Colors.grey.withOpacity(0.3),
+ color: Colors.grey.withValues(alpha: 0.3),
width: 0.4,
),
),
@@ -227,7 +227,7 @@ class _WeightChartWidgetState extends State {
borderColor: appTheme.blueA400,
gradient: LinearGradient(
colors: [
- appTheme.blueA400.withOpacity(0.14),
+ appTheme.blueA400.withValues(alpha: 0.14),
Colors.transparent,
],
begin: Alignment.topCenter,
diff --git a/lib/features/recipes/presentation/pages/about_recipes_screen.dart b/lib/features/recipes/presentation/pages/about_recipes_screen.dart
index 20162eca..e5749b7d 100644
--- a/lib/features/recipes/presentation/pages/about_recipes_screen.dart
+++ b/lib/features/recipes/presentation/pages/about_recipes_screen.dart
@@ -55,7 +55,7 @@ class _AboutRecipesScreenState extends State {
color: Colors.white,
border: Border(
top: BorderSide(
- color: Colors.black.withOpacity(0.1),
+ color: Colors.black.withValues(alpha: 0.1),
),
),
),
diff --git a/lib/features/settings/presentation/pages/settings_screen.dart b/lib/features/settings/presentation/pages/settings_screen.dart
index cccb16b7..af2e9387 100644
--- a/lib/features/settings/presentation/pages/settings_screen.dart
+++ b/lib/features/settings/presentation/pages/settings_screen.dart
@@ -216,7 +216,7 @@ class _SettingsScreenState extends State {
title: 'Уведомление о новых обновлениях',
trailing: CupertinoSwitch(
value: updatesNotificationsSwitchState,
- activeColor: appTheme.blueA400,
+ activeTrackColor: appTheme.blueA400,
onChanged: (newValue) {
setState(() {
updatesNotificationsSwitchState = newValue;
@@ -245,7 +245,7 @@ class _SettingsScreenState extends State {
title: 'Напоминание о заполнении дневника',
trailing: CupertinoSwitch(
value: fillDiaryNotificationsSwitchState,
- activeColor: appTheme.blueA400,
+ activeTrackColor: appTheme.blueA400,
onChanged: (newValue) {
setState(() {
fillDiaryNotificationsSwitchState = newValue;
@@ -274,7 +274,7 @@ class _SettingsScreenState extends State {
title: 'Указывать “настроение” в заполнение дневника',
trailing: CupertinoSwitch(
value: moodSwitchState,
- activeColor: appTheme.blueA400,
+ activeTrackColor: appTheme.blueA400,
onChanged: (newValue) {
setState(() {
moodSwitchState = newValue;
@@ -303,7 +303,7 @@ class _SettingsScreenState extends State {
title: 'Указывать “отход ко сну” в заполнение дневника',
trailing: CupertinoSwitch(
value: bedTimeSwitchState,
- activeColor: appTheme.blueA400,
+ activeTrackColor: appTheme.blueA400,
onChanged: (newValue) {
setState(() {
bedTimeSwitchState = newValue;
diff --git a/pubspec.yaml b/pubspec.yaml
index b9f4611f..341123b1 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -45,7 +45,10 @@ dependencies:
flutter_keyboard_visibility: ^6.0.0
share_plus: ^10.1.2
flutter_html: ^3.0.0-beta.2
- file_picker: ^8.1.4
+ file_picker:
+ git:
+ url: https://github.com/abdelaziz-mahdy/flutter_file_picker
+ ref: fix-flutter-3.27-compile-error
audioplayers: ^6.1.0
intl: ^0.19.0
rive: ^0.13.20