From c528f7a07e8a2323733a88853d18c98d16ddcf3f Mon Sep 17 00:00:00 2001 From: jahongireshonqulov Date: Mon, 27 Oct 2025 15:14:17 +0500 Subject: [PATCH] feat: Account page ui done --- android/app/src/main/AndroidManifest.xml | 1 + .../account_page/widgets/w_account_body.dart | 10 ++--- .../basket_page/widgets/w_basket_header.dart | 1 + .../browse_page/widgets/w_all_categories.dart | 2 +- .../browse_page/widgets/w_browse_item.dart | 37 +++++++++-------- .../widgets/w_browse_skeletonizer.dart | 2 +- .../browse_page/widgets/w_top_categories.dart | 2 +- .../widgets/w_cached_network_image.dart | 41 +++++++++++++++++++ .../presentation/widgets/w_food_item.dart | 22 ++++++---- 9 files changed, 85 insertions(+), 33 deletions(-) create mode 100644 lib/feature/common/presentation/widgets/w_cached_network_image.dart diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index c9fac6b..f90fc94 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,4 +1,5 @@ + WAccountRowItem( @@ -70,7 +69,7 @@ class WAccountAppBar extends StatelessWidget { fit: BoxFit.cover, ), ), - ), + ).paddingAll(8), title: Text('Felix', style: AppTextStyles.size18Medium), ); } @@ -166,7 +165,7 @@ class WChangeLanguage extends StatelessWidget with AccountMixins { children: [ Text( context.loc.changeLanguage, - style: AppTextStyles.size24Medium, + style: AppTextStyles.size20Medium, ), IconButton( onPressed: () { @@ -193,10 +192,11 @@ class WChangeLanguage extends StatelessWidget with AccountMixins { child: Image.asset(flags[index]), ), title: languages[index], - titleTextStyle: AppTextStyles.size16Medium, + titleTextStyle: AppTextStyles.size14Medium, ); }), ), + 10.verticalSpace ], ), ), diff --git a/lib/feature/basket/presentation/pages/basket_page/widgets/w_basket_header.dart b/lib/feature/basket/presentation/pages/basket_page/widgets/w_basket_header.dart index 9359912..9f9bafe 100644 --- a/lib/feature/basket/presentation/pages/basket_page/widgets/w_basket_header.dart +++ b/lib/feature/basket/presentation/pages/basket_page/widgets/w_basket_header.dart @@ -8,6 +8,7 @@ class WBasketHeader extends StatelessWidget { return Column( mainAxisSize: MainAxisSize.max, children: [ + 8.verticalSpace, Align( alignment: AlignmentGeometry.centerRight, child: InkWell( diff --git a/lib/feature/browse/presentation/pages/browse_page/widgets/w_all_categories.dart b/lib/feature/browse/presentation/pages/browse_page/widgets/w_all_categories.dart index 72d4f44..dfcf74c 100644 --- a/lib/feature/browse/presentation/pages/browse_page/widgets/w_all_categories.dart +++ b/lib/feature/browse/presentation/pages/browse_page/widgets/w_all_categories.dart @@ -40,7 +40,7 @@ class WAllCategoriesBody extends StatelessWidget { crossAxisCount: 2, mainAxisSpacing: 15, crossAxisSpacing: 10, - mainAxisExtent: 140, + mainAxisExtent: 175, ), itemBuilder: (context, index) { return WBrowseItem(); diff --git a/lib/feature/browse/presentation/pages/browse_page/widgets/w_browse_item.dart b/lib/feature/browse/presentation/pages/browse_page/widgets/w_browse_item.dart index 44354c6..c87af91 100644 --- a/lib/feature/browse/presentation/pages/browse_page/widgets/w_browse_item.dart +++ b/lib/feature/browse/presentation/pages/browse_page/widgets/w_browse_item.dart @@ -21,27 +21,32 @@ class WBrowseItem extends StatelessWidget { child: CachedNetworkImage( imageUrl: AppLocaleKeys.foodImageUrl, width: context.w, - height: 96, + height:120, fit: BoxFit.cover, ), ), - SizedBox( - width: context.w, - child: DecoratedBox( - decoration: BoxDecoration( - borderRadius: AppUtils.kBorderRadiusBottom15, - border: Border.all( - color: AppColors.cE8E8E8, - width: 1, + Expanded( + child: SizedBox( + width: context.w, + child: DecoratedBox( + decoration: BoxDecoration( + borderRadius: AppUtils.kBorderRadiusBottom15, + border: Border.all( + color: AppColors.cE8E8E8, + width: 1, + ), + ), + child: Align( + alignment: AlignmentGeometry.center, + child: Text( + "Restaurant", + textAlign: TextAlign.center, + style: AppTextStyles.size16Regular.copyWith( + height: 20 / 16, + ), + ).paddingSymmetric(horizontal: 30,vertical:5), ), ), - child: Text( - "Restaurant Rewards", - textAlign: TextAlign.center, - style: AppTextStyles.size16Regular.copyWith( - height: 20 / 16, - ), - ).paddingSymmetric(horizontal: 30), ), ), ], diff --git a/lib/feature/browse/presentation/pages/browse_page/widgets/w_browse_skeletonizer.dart b/lib/feature/browse/presentation/pages/browse_page/widgets/w_browse_skeletonizer.dart index 4d9e4b7..4453ffb 100644 --- a/lib/feature/browse/presentation/pages/browse_page/widgets/w_browse_skeletonizer.dart +++ b/lib/feature/browse/presentation/pages/browse_page/widgets/w_browse_skeletonizer.dart @@ -31,7 +31,7 @@ class WBrowseSkeletonizerItem extends StatelessWidget { decoration: BoxDecoration( borderRadius: AppUtils.kBorderRadiusBottom15, border: Border.all( - color: AppColors.cE8E8E8, + color: AppColors.cE6E6E6, width: 1, ), ), diff --git a/lib/feature/browse/presentation/pages/browse_page/widgets/w_top_categories.dart b/lib/feature/browse/presentation/pages/browse_page/widgets/w_top_categories.dart index b6a1683..83845ec 100644 --- a/lib/feature/browse/presentation/pages/browse_page/widgets/w_top_categories.dart +++ b/lib/feature/browse/presentation/pages/browse_page/widgets/w_top_categories.dart @@ -39,7 +39,7 @@ class WTopCategoriesBody extends StatelessWidget { crossAxisCount: 2, mainAxisSpacing: 15, crossAxisSpacing: 10, - mainAxisExtent: 140, + mainAxisExtent: 175, ), itemBuilder: (context, index) { return WBrowseItem(); diff --git a/lib/feature/common/presentation/widgets/w_cached_network_image.dart b/lib/feature/common/presentation/widgets/w_cached_network_image.dart new file mode 100644 index 0000000..9896634 --- /dev/null +++ b/lib/feature/common/presentation/widgets/w_cached_network_image.dart @@ -0,0 +1,41 @@ +import '../../../../food_delivery_client.dart'; + +class WCachedNetworkImage extends StatelessWidget { + const WCachedNetworkImage({ + super.key, + this.borderRadius, + required this.imageUrl, + this.height, + this.width, + this.fit, + }); + + final BorderRadius? borderRadius; + final String imageUrl; + final double? height; + final double? width; + final BoxFit? fit; + + @override + Widget build(BuildContext context) { + return ClipRRect( + borderRadius: borderRadius ?? AppUtils.kBorderRadius20, + child: CachedNetworkImage( + imageUrl: imageUrl, + height: height ?? 155, + width: width ?? context.w, + fit: fit ?? BoxFit.cover, + errorWidget: (context, url, error) => + const Center(child: Icon(Icons.error, color: AppColors.cRed)), + placeholder: (context, url) => Skeletonizer( + enabled: true, + child: Container( + height: height ?? 150, + width: width ?? context.w, + color: AppColors.cE6E6E6, + ), + ), + ), + ); + } +} diff --git a/lib/feature/common/presentation/widgets/w_food_item.dart b/lib/feature/common/presentation/widgets/w_food_item.dart index 5bd7472..bbf8d8a 100644 --- a/lib/feature/common/presentation/widgets/w_food_item.dart +++ b/lib/feature/common/presentation/widgets/w_food_item.dart @@ -2,6 +2,7 @@ import 'dart:ui'; import 'package:flutter_bounceable/flutter_bounceable.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:food_delivery_client/feature/common/presentation/widgets/w_cached_network_image.dart'; import '../../../../food_delivery_client.dart'; @@ -41,16 +42,19 @@ class WFoodItem extends StatelessWidget { child: Stack( children: [ Positioned.fill( - child: CachedNetworkImage( - imageUrl: AppLocaleKeys.imageUrl, - width: 200, - height: 155, - fit: BoxFit.cover, - placeholder: (context, url) => - Center(child: CircularProgressIndicator.adaptive()), - errorWidget: (context, url, error) => Icon(Icons.error), - ), + child: WCachedNetworkImage(imageUrl: AppLocaleKeys.imageUrl), ), + // Positioned.fill( + // child: CachedNetworkImage( + // imageUrl: AppLocaleKeys.imageUrl, + // width: 200, + // height: 155, + // fit: BoxFit.cover, + // placeholder: (context, url) => + // Center(child: CircularProgressIndicator.adaptive()), + // errorWidget: (context, url, error) => Icon(Icons.error), + // ), + // ), Positioned( top: 10, right: 8,