From 30f190aab9a1e8c4f4f6bd4584eca21429ae2e1a Mon Sep 17 00:00:00 2001 From: jahongireshonqulov Date: Fri, 24 Oct 2025 20:17:59 +0500 Subject: [PATCH] feat:Baskets empty page ui done --- assets/icons/ic_carts.svg | 45 ++++++++++++++++++ assets/translations/app_en.arb | 8 +++- assets/translations/app_ru.arb | 8 +++- assets/translations/app_uz.arb | 7 ++- lib/core/l10n/app_localizations.dart | 30 ++++++++++++ lib/core/l10n/app_localizations_en.dart | 16 +++++++ lib/core/l10n/app_localizations_ru.dart | 16 +++++++ lib/core/l10n/app_localizations_uz.dart | 16 +++++++ lib/core/theme/app_icons.dart | 3 ++ .../pages/basket_page/basket_page.dart | 7 ++- .../basket_page/widgets/w_basket_empty.dart | 46 +++++++++++++++++++ .../basket_page/widgets/w_basket_header.dart | 44 ++++++++++++++++++ 12 files changed, 242 insertions(+), 4 deletions(-) create mode 100644 assets/icons/ic_carts.svg create mode 100644 lib/feature/basket/presentation/pages/basket_page/widgets/w_basket_empty.dart create mode 100644 lib/feature/basket/presentation/pages/basket_page/widgets/w_basket_header.dart diff --git a/assets/icons/ic_carts.svg b/assets/icons/ic_carts.svg new file mode 100644 index 0000000..b259e6c --- /dev/null +++ b/assets/icons/ic_carts.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/translations/app_en.arb b/assets/translations/app_en.arb index 91bb122..41ded29 100644 --- a/assets/translations/app_en.arb +++ b/assets/translations/app_en.arb @@ -111,5 +111,11 @@ } } - } + }, + "cartsTitle": "Carts", + "addItemsStartBasket": "Add items to start a basket", + "basketHint": "Once you add items from a restaurant or store, your basket will appear here.", + "startShopping": "Start Shopping", + "orders": "Orders" + } \ No newline at end of file diff --git a/assets/translations/app_ru.arb b/assets/translations/app_ru.arb index dce867d..9a62463 100644 --- a/assets/translations/app_ru.arb +++ b/assets/translations/app_ru.arb @@ -107,7 +107,13 @@ "spendAndSave@placeholders": { "spend": {}, "save": {} - } + }, + "cartsTitle": "Корзины", + "addItemsStartBasket": "Добавьте товары, чтобы создать корзину", + "basketHint": "Когда вы добавите товары из ресторана или магазина, ваша корзина появится здесь.", + "startShopping": "Начать покупки", + "orders": "Заказы" + diff --git a/assets/translations/app_uz.arb b/assets/translations/app_uz.arb index a837ad0..7464089 100644 --- a/assets/translations/app_uz.arb +++ b/assets/translations/app_uz.arb @@ -107,7 +107,12 @@ "spendAndSave@placeholders": { "spend": {}, "save": {} - } + }, + "cartsTitle": "Savatlar", + "addItemsStartBasket": "Savatni boshlash uchun mahsulot qo‘shing", + "basketHint": "Restorandan yoki do'kondan mahsulot qo‘shsangiz, savatingiz shu yerda paydo bo‘ladi.", + "startShopping": "Xaridni boshlash", + "orders": "Buyurtmalar" diff --git a/lib/core/l10n/app_localizations.dart b/lib/core/l10n/app_localizations.dart index c4a1d5b..b199548 100644 --- a/lib/core/l10n/app_localizations.dart +++ b/lib/core/l10n/app_localizations.dart @@ -525,6 +525,36 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'Spend {spend}, save {save}'** String spendAndSave(String spend, String save); + + /// No description provided for @cartsTitle. + /// + /// In en, this message translates to: + /// **'Carts'** + String get cartsTitle; + + /// No description provided for @addItemsStartBasket. + /// + /// In en, this message translates to: + /// **'Add items to start a basket'** + String get addItemsStartBasket; + + /// No description provided for @basketHint. + /// + /// In en, this message translates to: + /// **'Once you add items from a restaurant or store, your basket will appear here.'** + String get basketHint; + + /// No description provided for @startShopping. + /// + /// In en, this message translates to: + /// **'Start Shopping'** + String get startShopping; + + /// No description provided for @orders. + /// + /// In en, this message translates to: + /// **'Orders'** + String get orders; } class _AppLocalizationsDelegate diff --git a/lib/core/l10n/app_localizations_en.dart b/lib/core/l10n/app_localizations_en.dart index 572a4f8..d8bf109 100644 --- a/lib/core/l10n/app_localizations_en.dart +++ b/lib/core/l10n/app_localizations_en.dart @@ -231,4 +231,20 @@ class AppLocalizationsEn extends AppLocalizations { String spendAndSave(String spend, String save) { return 'Spend $spend, save $save'; } + + @override + String get cartsTitle => 'Carts'; + + @override + String get addItemsStartBasket => 'Add items to start a basket'; + + @override + String get basketHint => + 'Once you add items from a restaurant or store, your basket will appear here.'; + + @override + String get startShopping => 'Start Shopping'; + + @override + String get orders => 'Orders'; } diff --git a/lib/core/l10n/app_localizations_ru.dart b/lib/core/l10n/app_localizations_ru.dart index ad6200a..a609f38 100644 --- a/lib/core/l10n/app_localizations_ru.dart +++ b/lib/core/l10n/app_localizations_ru.dart @@ -232,4 +232,20 @@ class AppLocalizationsRu extends AppLocalizations { String spendAndSave(String spend, String save) { return 'Потратьте $spend, сэкономьте $save'; } + + @override + String get cartsTitle => 'Корзины'; + + @override + String get addItemsStartBasket => 'Добавьте товары, чтобы создать корзину'; + + @override + String get basketHint => + 'Когда вы добавите товары из ресторана или магазина, ваша корзина появится здесь.'; + + @override + String get startShopping => 'Начать покупки'; + + @override + String get orders => 'Заказы'; } diff --git a/lib/core/l10n/app_localizations_uz.dart b/lib/core/l10n/app_localizations_uz.dart index bba85ea..0bd4af8 100644 --- a/lib/core/l10n/app_localizations_uz.dart +++ b/lib/core/l10n/app_localizations_uz.dart @@ -232,4 +232,20 @@ class AppLocalizationsUz extends AppLocalizations { String spendAndSave(String spend, String save) { return '$spend sarflang, $save tejang'; } + + @override + String get cartsTitle => 'Savatlar'; + + @override + String get addItemsStartBasket => 'Savatni boshlash uchun mahsulot qo‘shing'; + + @override + String get basketHint => + 'Restorandan yoki do\'kondan mahsulot qo‘shsangiz, savatingiz shu yerda paydo bo‘ladi.'; + + @override + String get startShopping => 'Xaridni boshlash'; + + @override + String get orders => 'Buyurtmalar'; } diff --git a/lib/core/theme/app_icons.dart b/lib/core/theme/app_icons.dart index 665c8bb..14e3dd1 100644 --- a/lib/core/theme/app_icons.dart +++ b/lib/core/theme/app_icons.dart @@ -23,6 +23,7 @@ abstract class AppIcons { static const String icUber = "$baseUrl/ic_uber.svg"; static const String icLocation = "$baseUrl/ic_location.svg"; static const String icArrowBottom = "$baseUrl/ic_arrow_btm.svg"; + static const String icEmptyBasket = "$baseUrl/ic_empty_basket.svg"; static const String icPicked = "$baseUrl/ic_picked.svg"; static const String icMostPopular = "$baseUrl/ic_popular.svg"; @@ -44,4 +45,6 @@ abstract class AppIcons { static const String icGlutenFree = "$baseUrl/ic_gluten_free.png"; static const String icAllergyFriendly = "$baseUrl/ic_allergy_friendly.png"; static const String icClock = "$baseUrl/ic_clock.svg"; + static const String icOrders= "$baseUrl/ic_orders.png"; + } diff --git a/lib/feature/basket/presentation/pages/basket_page/basket_page.dart b/lib/feature/basket/presentation/pages/basket_page/basket_page.dart index 1cbaca7..5c4b5e7 100644 --- a/lib/feature/basket/presentation/pages/basket_page/basket_page.dart +++ b/lib/feature/basket/presentation/pages/basket_page/basket_page.dart @@ -1,3 +1,6 @@ +import 'package:food_delivery_client/feature/basket/presentation/pages/basket_page/widgets/w_basket_empty.dart'; +import 'package:food_delivery_client/feature/basket/presentation/pages/basket_page/widgets/w_basket_header.dart'; + import '../../../../../food_delivery_client.dart'; class BasketPage extends StatelessWidget { @@ -6,7 +9,9 @@ class BasketPage extends StatelessWidget { @override Widget build(BuildContext context) { return WLayout( - child: Scaffold(body: Center(child: Text(context.loc.useYourTAxiAccount))), + child: Scaffold(body: Column(children: [ + WBasketHeader(), + WBasketEmpty()])), ); } } diff --git a/lib/feature/basket/presentation/pages/basket_page/widgets/w_basket_empty.dart b/lib/feature/basket/presentation/pages/basket_page/widgets/w_basket_empty.dart new file mode 100644 index 0000000..a74136f --- /dev/null +++ b/lib/feature/basket/presentation/pages/basket_page/widgets/w_basket_empty.dart @@ -0,0 +1,46 @@ +import '../../../../../../food_delivery_client.dart'; + +class WBasketEmpty extends StatelessWidget { + const WBasketEmpty({super.key}); + + @override + Widget build(BuildContext context) { + return BlocBuilder( + builder: (context, state) { + return Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + 70.verticalSpace, + SvgPicture.asset(AppIcons.icEmptyBasket), + Text( + context.loc.addItemsStartBasket, + textAlign: TextAlign.center, + style: AppTextStyles.size20Medium, + ), + 12.verticalSpace, + Text( + context.loc.basketHint, + textAlign: TextAlign.center, + style: AppTextStyles.size16Regular.copyWith( + color: AppColors.c545454, + height: 24 / 16, + ), + ), + 38.verticalSpace, + AppButton( + name: context.loc.startShopping, + onPressed: () { + context.read().add(MainEvent.loaded(0)); + }, + height: 45, + width: 250, + + borderRadius: 99, + ), + ], + ); + }, + ).paddingSymmetric(horizontal: 35); + } +} 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 new file mode 100644 index 0000000..9359912 --- /dev/null +++ b/lib/feature/basket/presentation/pages/basket_page/widgets/w_basket_header.dart @@ -0,0 +1,44 @@ +import '../../../../../../food_delivery_client.dart'; + +class WBasketHeader extends StatelessWidget { + const WBasketHeader({super.key}); + + @override + Widget build(BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.max, + children: [ + Align( + alignment: AlignmentGeometry.centerRight, + child: InkWell( + borderRadius: BorderRadius.circular(99), + onTap: () {}, + child: Ink( + decoration: BoxDecoration( + color: AppColors.cEEEEEE, + borderRadius: BorderRadius.circular(99), + ), + child: Row( + spacing: 10, + mainAxisSize: MainAxisSize.min, + children: [ + Image.asset( + AppIcons.icOrders, + height: 20, + width: 20, + fit: BoxFit.cover, + ), + Text(context.loc.orders, style: AppTextStyles.size14Medium), + ], + ).paddingSymmetric(vertical: 10, horizontal: 16), + ), + ), + ), + Align( + alignment: AlignmentGeometry.centerLeft, + child: Text(context.loc.cartsTitle, style: AppTextStyles.size36Bold), + ), + ], + ).paddingSymmetric(horizontal: 15); + } +}