Untitled
unknown
dart
4 years ago
29 kB
5
Indexable
import 'package:cached_network_image/cached_network_image.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:dots_indicator/dots_indicator.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:iketfaa_delivery/App/Common/Modules/SignIn/binding/signin_binding.dart';
import 'package:iketfaa_delivery/App/Common/Modules/SignIn/view/signin_view.dart';
import 'package:iketfaa_delivery/App/Common/Services/translation_service.dart';
import 'package:iketfaa_delivery/App/Common/Utilities/Constants/AppColors.dart';
import 'package:iketfaa_delivery/App/Common/Utilities/Constants/AppStyles.dart';
import 'package:iketfaa_delivery/App/Common/Utilities/Constants/Strings/Backend.dart';
import 'package:iketfaa_delivery/App/Common/Widgets/CustomShimmerEffect.dart';
import 'package:iketfaa_delivery/App/Common/Widgets/no_items_empty.dart';
import 'package:iketfaa_delivery/App/Delivery/Models/Main/DeliveryHomeTopBannerItem.dart';
import 'package:iketfaa_delivery/App/Delivery/Models/Main/PersonalAddress.dart';
import 'package:iketfaa_delivery/App/Delivery/Modules/DeliveryHome/controller/delivery_home_controller.dart';
import 'package:carousel_slider/carousel_slider.dart';
import 'package:iketfaa_delivery/App/Delivery/Modules/DeliveryUser/DeliveryUserAddressBook/binding/delivery_address_book_binding.dart';
import 'package:iketfaa_delivery/App/Delivery/Modules/DeliveryUser/DeliveryUserAddressBook/view/delivery_add_new_address_view.dart';
import 'package:iketfaa_delivery/App/Delivery/Modules/NewOrder/binding/delivery_new_order_binding.dart';
import 'package:iketfaa_delivery/App/Delivery/Modules/NewOrder/view/delivery_new_order_view.dart';
import 'package:iketfaa_delivery/App/Delivery/Modules/Stores/binding/delivery_stores_binding.dart';
import 'package:iketfaa_delivery/App/Delivery/Modules/Stores/view/delivery_stores_view.dart';
import 'package:iketfaa_delivery/App/Delivery/Modules/StoresSearch/binding/delivery_stores_search_binding.dart';
import 'package:iketfaa_delivery/App/Delivery/Modules/StoresSearch/view/delivery_stores_search_view.dart';
import 'package:iketfaa_delivery/App/Delivery/Utilities/Widgets/Drawer/delivery_tile_button_for_drawer.dart';
import 'package:iketfaa_delivery/App/Delivery/Utilities/Widgets/LocationTile.dart';
import 'package:iketfaa_delivery/App/Delivery/Utilities/Widgets/delivery_home_appbar.dart';
class DeliveryHomeView extends GetView<DeliveryHomeController> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.white,
resizeToAvoidBottomInset: false,
appBar: DeliveryHomeAppBar(
drawerFunction: () => Scaffold.of(context).openDrawer(),
deliverToFunction: () {
controller.authManager.commonTools.showCustomBottomSheet(
context,
controller.authManager.isLogged.value
? "chooseDeliveryLocation".tr
: 'pleaseSignIn'.tr,
controller.authManager.isLogged.value
? StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection(DELIVERY_USERS_COLLECTION)
.doc(controller.authManager.appUser.value.id)
.collection(PERSONAL_ADDRESS_COLLECTION)
.orderBy(DATE_FIELD, descending: true)
.snapshots(),
builder: (context, snapshot) {
if (snapshot.data == null) {
return Container(
height: Get.width * 0.6,
width: Get.width,
child: CupertinoActivityIndicator(),
);
}
if (!snapshot.hasData) {
return Container(
height: Get.width * 0.6,
width: Get.width,
child: CupertinoActivityIndicator(),
);
}
return !snapshot.data!.docs.isEmpty
? Container(
height: Get.width * 0.8,
padding: EdgeInsets.symmetric(horizontal: 25),
child: ListView(
shrinkWrap: true,
children: [
Container(
child: ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: snapshot.data!.docs.length,
itemBuilder: (context, index) {
DocumentSnapshot doc =
snapshot.data!.docs[index];
PersonalAddress? address =
PersonalAddress.fromMap(doc.data()
as Map<String, dynamic>);
return LocationTile(
withCricle: true,
address: address,
active: controller
.deliveryHubController
.currentPersonalAddress
.value
.adID ==
address.adID,
onTap: () {
controller
.deliveryHubController
.currentPersonalAddress
.value = address;
Get.back();
},
);
},
),
),
ListTile(
onTap: () {
controller.homeAddressFlag.value = true;
Get.to(
() => DeliveryAddNewAddressView(),
binding: DeliveryAddressBookBinding(),
);
},
title: Text('addNewAddress'.tr,
style: Get.textTheme.headline4),
leading: SvgPicture.asset(
'assets/svg/gen011-021.svg',
width: 25,
),
),
Divider(),
ListTile(
onTap: () {
controller
.deliveryHubController
.currentPersonalAddress
.value = PersonalAddress();
Get.back();
},
title: Text('currentLocation'.tr,
style: Get.textTheme.headline4),
leading: SvgPicture.asset(
'assets/svg/gen011-021.svg',
width: 25,
),
)
],
),
)
: Container(
padding: EdgeInsets.all(10),
child: Column(
children: [
ListTile(
onTap: () {
controller.homeAddressFlag.value = true;
Get.to(
() => DeliveryAddNewAddressView(),
binding: DeliveryAddressBookBinding(),
);
},
title: Text('addNewAddress'.tr,
style: Get.textTheme.headline4),
leading: SvgPicture.asset(
'assets/svg/gen011-021.svg',
width: 25,
),
),
Divider(),
ListTile(
onTap: () {
controller
.deliveryHubController
.currentPersonalAddress
.value = PersonalAddress();
Get.back();
},
title: Text('currentLocation'.tr,
style: Get.textTheme.headline4),
leading: SvgPicture.asset(
'assets/svg/gen011-021.svg',
width: 25,
),
)
],
),
);
},
)
: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
height: 10,
color: AppColors.white,
),
Container(
color: AppColors.white,
child: Column(
children: [
DelvieryTileButtonForDrawer(
title: 'login'.tr,
onTap: () {
Get.offAll(() => SignInView(),
binding: SignInBinding());
},
icon:
Icon(Icons.login, color: AppColors.primary),
),
Container(
height: 30,
color: AppColors.white,
),
],
),
),
],
));
},
width: Get.width * 0.8,
),
body: Center(
child: Container(
width: Get.width * 0.8,
child: ListView(
padding: EdgeInsets.zero,
children: [
const SizedBox(height: 20.0),
FutureBuilder<QuerySnapshot>(
future: FirebaseFirestore.instance
.collection(UTILITIES_COLLECTION)
.doc(DELIVERY_ADMIN_OPTIONS_DOC)
.collection(DELIVERY_HOME_BANNERS_COLLECTION)
.orderBy(DATE_FIELD, descending: true)
.get(),
builder: (context, snapshot) {
if (snapshot.data == null) {
return CustomShimmerEffect.rectangular(height: 200);
}
if (!snapshot.hasData) {
return CustomShimmerEffect.rectangular(height: 200);
}
return Stack(
children: [
CarouselSlider.builder(
options: CarouselOptions(
autoPlay: true,
enlargeCenterPage: true,
viewportFraction: 1,
aspectRatio: 1.8,
initialPage: 0,
onPageChanged: (index, reason) {
controller.deliveryHubController.currentPos
.value = index;
}),
itemCount: snapshot.data!.docs.length,
itemBuilder: (BuildContext context, int itemIndex,
int pageViewIndex) {
DeliveryHomeTopBannerItem
deliveryHomeTopBannerItem =
DeliveryHomeTopBannerItem.fromJson(
snapshot.data!.docs[itemIndex].data()
as Map<String, dynamic>);
return Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15.0),
),
child: InkWell(
onTap: () {
controller.authManager.commonTools.openURL(
deliveryHomeTopBannerItem.onTapLink!);
},
child: IgnorePointer(
child: Stack(
children: [
Positioned.fill(
child: Container(
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(15.0),
image: DecorationImage(
fit: BoxFit.cover,
image: CachedNetworkImageProvider(
deliveryHomeTopBannerItem
.imagePath!))),
),
),
Container(
decoration: BoxDecoration(
color: AppColors.black
.withOpacity(0.6),
borderRadius:
BorderRadius.circular(15.0),
),
),
Align(
alignment: Alignment.bottomCenter,
child: Container(
margin: EdgeInsets.only(
bottom: 50.0),
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
15.0),
),
child: Column(
mainAxisAlignment:
MainAxisAlignment.end,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Center(
child: Text(
TranslationService()
.isLocaleArabic()
? deliveryHomeTopBannerItem
.titleAr!
: deliveryHomeTopBannerItem
.titleEn!,
style: Get.textTheme
.headline3!
.copyWith(
color: AppColors
.white,
fontWeight:
FontWeight
.w600),
),
),
SizedBox(
height: 10.0,
),
Center(
child: Text(
TranslationService().isLocaleArabic()
? deliveryHomeTopBannerItem
.subtitleAr!
: deliveryHomeTopBannerItem
.subtitleEn!,
style: Get.textTheme
.headline6!
.copyWith(
color: AppColors
.white,
fontWeight:
FontWeight
.w600),
),
),
],
)))
],
),
),
),
);
}),
Positioned.fill(
child: Align(
alignment: Alignment.bottomCenter,
child: Obx(
() => Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
DotsIndicator(
dotsCount: snapshot.data!.docs.length,
position: controller
.deliveryHubController.currentPos.value
.toDouble(),
decorator: DotsDecorator(
color: AppColors.shadow, // Inactive color
activeColor: AppColors.white,
),
),
],
).marginOnly(bottom: 10.0),
),
),
)
],
);
}),
const SizedBox(height: 20.0),
GestureDetector(
onTap: () {
Get.to(() => DeliveryStoresSearchView(),
binding: DeliveryStoresSearchBinding());
},
child: Container(
margin: EdgeInsets.all(5.0),
decoration: BoxDecoration(
color: AppColors.white,
borderRadius: BorderRadius.circular(30.0),
boxShadow: [
AppStyles.primaryShadow,
],
),
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
'search_stores'.tr,
style: Get.textTheme.headline6!.copyWith(
color: AppColors.grey.withOpacity(0.8),
fontWeight: FontWeight.w600,
),
),
Expanded(child: SizedBox()),
SvgPicture.asset("assets/svg/search.svg"),
],
),
)),
),
const SizedBox(height: 20.0),
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 10.0, vertical: 10.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('categories'.tr,
style: Get.textTheme.headline3!
.copyWith(fontWeight: FontWeight.w600)),
InkWell(
onTap: () {
Get.to(
() => DeliveryNewOrderView(
title: 'directOrder',
),
binding: DeliveryNewOrderBinding());
},
child: Text('directOrder'.tr,
style: Get.textTheme.headline4!.copyWith(
color: AppColors.primary,
fontWeight: FontWeight.w700)),
),
],
),
),
GridView.count(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
padding: const EdgeInsets.symmetric(
horizontal: 10.0, vertical: 10.0),
childAspectRatio: 1,
crossAxisSpacing: 35.0,
mainAxisSpacing: 15.0,
crossAxisCount: 2,
children: [
HomeGridWhiteButton(
onPressed: () {
Get.to(() => DeliveryStoresView(),
arguments: [
"restaurant",
"restaurants",
"assets/img/resturant_bg.jpg"
],
binding: DeliveryStoresBinding());
},
title: 'resturant'.tr,
icon: "assets/svg/restaurants.svg",
),
HomeGridWhiteButton(
onPressed: () {
Get.to(() => DeliveryStoresView(),
arguments: [
'supermarket',
'supermarkets',
'assets/img/supermarkets_bg.jpg'
],
binding: DeliveryStoresBinding());
},
title: 'supermarkets'.tr,
icon: "assets/svg/supermarkets.svg",
),
HomeGridWhiteButton(
onPressed: () {
Get.to(() => DeliveryStoresView(),
arguments: [
'electronics_store',
'electronics',
'assets/img/electronics_bg.jpg'
],
binding: DeliveryStoresBinding());
},
title: 'electronics'.tr,
icon: "assets/svg/electronics.svg",
),
HomeGridWhiteButton(
onPressed: () {
Get.to(() => DeliveryStoresView(),
arguments: [
'pharmacy',
'pharmacy',
'assets/img/pharmacy_bg.jpg'
],
binding: DeliveryStoresBinding());
},
title: 'pharmacy'.tr,
icon: "assets/svg/pharmacy.svg",
),
HomeGridWhiteButton(
onPressed: () {
Get.to(() => DeliveryStoresView(),
arguments: [
'florist',
'florist',
'assets/img/florist_bg.jpg'
],
binding: DeliveryStoresBinding());
},
title: 'florist'.tr,
icon: "assets/svg/florist.svg",
),
HomeGridWhiteButton(
onPressed: () {
Get.to(() => DeliveryStoresView(),
arguments: [
'laundry',
'laundry',
'assets/img/laundry_bg.jpg'
],
binding: DeliveryStoresBinding());
},
title: 'laundry'.tr,
icon: "assets/svg/laundry.svg",
),
],
),
SizedBox(height: Get.height * 0.15)
],
),
),
),
);
}
}
class HomeGridWhiteButton extends StatelessWidget {
final VoidCallback onPressed;
final String title;
final String icon;
const HomeGridWhiteButton({
required this.onPressed,
required this.title,
required this.icon,
});
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
color: AppColors.white,
boxShadow: [
AppStyles.primaryShadow,
],
),
child: Material(
color: Colors.transparent,
child: InkWell(
onTap: onPressed,
customBorder: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
SvgPicture.asset(icon),
SizedBox(height: 10),
Text(
title.tr,
style: Get.textTheme.bodyText1!
.copyWith(fontWeight: FontWeight.w700),
)
],
),
),
),
);
}
}
Editor is loading...