item for sale improvement.

merge-requests/1/merge
Sikander Saleem 2 years ago
parent 07fe434473
commit f647b32c65

@ -42,9 +42,9 @@ extension WidgetExtensions on Widget {
child: this, child: this,
); );
Widget objectContainerView({String title = "", String note = ""}) { Widget objectContainerView({String title = "", String note = "", bool disablePadding = false}) {
return Container( return Container(
padding: const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14), padding: disablePadding ? EdgeInsets.zero : const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
borderRadius: BorderRadius.circular(15), borderRadius: BorderRadius.circular(15),

@ -95,34 +95,21 @@ class _ItemsForSaleFragmentState extends State<ItemsForSaleFragment> {
getItemsForSale(currentPageNo, currentCategoryID); getItemsForSale(currentPageNo, currentCategoryID);
}); });
}, },
child: Container( child: Column(
decoration: BoxDecoration( mainAxisAlignment: MainAxisAlignment.spaceBetween,
color: Colors.white, crossAxisAlignment: CrossAxisAlignment.start,
borderRadius: BorderRadius.circular(15), children: [
boxShadow: [ Row(
BoxShadow( mainAxisAlignment: MainAxisAlignment.spaceBetween,
color: const Color(0xff000000).withOpacity(.05), crossAxisAlignment: CrossAxisAlignment.start,
blurRadius: 26, children: [
offset: const Offset(0, -3), SvgPicture.string(getSaleCategoriesList[index].content!, fit: BoxFit.contain),
), currentCategoryID == getSaleCategoriesList[index].categoryID ? const Icon(Icons.check_circle_rounded, color: MyColors.greenColor, size: 16.0) : Container(),
], ],
), ).expanded,
child: Column( getSaleCategoriesList[index].title!.toText10()
mainAxisAlignment: MainAxisAlignment.spaceBetween, ],
crossAxisAlignment: CrossAxisAlignment.start, ).paddingOnly(left: 10, right: 10, bottom: 10, top: 12).expanded.objectContainerView(disablePadding: true),
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SvgPicture.string(getSaleCategoriesList[index].content!, fit: BoxFit.contain),
currentCategoryID == getSaleCategoriesList[index].categoryID ? const Icon(Icons.check_circle_rounded, color: MyColors.greenColor, size: 16.0) : Container(),
],
).expanded,
getSaleCategoriesList[index].title!.toText10()
],
).paddingOnly(left: 10, right: 10, bottom: 10, top: 12),
),
), ),
); );
}, },
@ -133,7 +120,7 @@ class _ItemsForSaleFragmentState extends State<ItemsForSaleFragment> {
getItemsForSaleList.isNotEmpty getItemsForSaleList.isNotEmpty
? GridView( ? GridView(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 162 / 266, crossAxisSpacing: 12, mainAxisSpacing: 12), gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 162 / 266, crossAxisSpacing: 12, mainAxisSpacing: 12),
padding: const EdgeInsets.only(left: 21, right: 21, bottom: 21, top: 21), padding: const EdgeInsets.only(left: 21, right: 21, bottom: 21, top: 12),
shrinkWrap: true, shrinkWrap: true,
primary: false, primary: false,
physics: const ScrollPhysics(), physics: const ScrollPhysics(),
@ -160,49 +147,36 @@ class _ItemsForSaleFragmentState extends State<ItemsForSaleFragment> {
onTap: () { onTap: () {
Navigator.pushNamed(context, AppRoutes.itemsForSaleDetail, arguments: getItemsForSaleList); Navigator.pushNamed(context, AppRoutes.itemsForSaleDetail, arguments: getItemsForSaleList);
}, },
child: Container( child: Column(
padding: const EdgeInsets.all(10.0), crossAxisAlignment: CrossAxisAlignment.start,
decoration: BoxDecoration( // mainAxisSize: MainAxisSize.min,
color: Colors.white, children: [
borderRadius: BorderRadius.circular(10), Hero(
boxShadow: [ tag: "ItemImage" + getItemsForSaleList.itemSaleID.toString(),
BoxShadow( transitionOnUserGestures: true,
color: const Color(0xff000000).withOpacity(.05), child: AspectRatio(
blurRadius: 26, aspectRatio: 148 / 127,
offset: const Offset(0, -3), child: ClipRRect(
), borderRadius: BorderRadius.circular(6),
], child: Image.memory(
), base64Decode(getItemsForSaleList.itemAttachments![0].content!),
child: Column( fit: BoxFit.cover,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Hero(
tag: "ItemImage" + getItemsForSaleList.itemSaleID.toString(),
transitionOnUserGestures: true,
child: AspectRatio(
aspectRatio: 148 / 127,
child: ClipRRect(
borderRadius: BorderRadius.circular(6),
child: Image.memory(
base64Decode(getItemsForSaleList.itemAttachments![0].content!),
fit: BoxFit.cover,
),
), ),
), ),
), ),
10.height, ),
getItemsForSaleList.title!.toText16(isBold: true, color: const Color(0xff2B353E), maxlines: 1), 10.height,
getItemsForSaleList.description!.toText12(maxLine: 2, color: const Color(0xff535353)), getItemsForSaleList.title!.toText16(maxlines: 1),
16.height, getItemsForSaleList.description!.toText12(maxLine: 3, color: MyColors.grey57Color).expanded,
getItemsForSaleList.status!.toText14(isBold: true, color: getItemsForSaleList.status == 'Approved' ? MyColors.greenColor : MyColors.yellowColor), // 8.height,
Row( getItemsForSaleList.status!.toText14(color: getItemsForSaleList.status == 'Approved' ? MyColors.greenColor : MyColors.yellowColor),
mainAxisAlignment: MainAxisAlignment.spaceBetween, Row(
children: ["${getItemsForSaleList.quotePrice} ${getItemsForSaleList.currencyCode!}".toText14(isBold: true), SvgPicture.asset("assets/images/arrow_next.svg").paddingOnly(bottom: 4)], mainAxisAlignment: MainAxisAlignment.spaceBetween,
), children: ["${getItemsForSaleList.quotePrice} ${getItemsForSaleList.currencyCode!}".toText16(isBold: true), SvgPicture.asset("assets/images/arrow_next.svg").paddingOnly(bottom: 4)],
], ),
), 6.height
), ],
).paddingAll(8).expanded.objectContainerView(disablePadding: true),
); );
} }

@ -4,6 +4,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/date_uitl.dart'; import 'package:mohem_flutter_app/classes/date_uitl.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
@ -11,6 +12,7 @@ import 'package:mohem_flutter_app/models/items_for_sale/get_items_for_sale_list.
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/circular_avatar.dart'; import 'package:mohem_flutter_app/widgets/circular_avatar.dart';
import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
class ItemForSaleDetailPage extends StatefulWidget { class ItemForSaleDetailPage extends StatefulWidget {
@ -26,113 +28,86 @@ class _ItemForSaleDetailPageState extends State<ItemForSaleDetailPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
getItemsForSaleList = ModalRoute.of(context)?.settings.arguments as GetItemsForSaleList; getItemsForSaleList = ModalRoute.of(context)?.settings.arguments as GetItemsForSaleList;
return Scaffold( return Scaffold(
backgroundColor: Colors.white, backgroundColor: Colors.white,
appBar: AppBarWidget(context, title: LocaleKeys.itemsForSale.tr(), showHomeButton: true), appBar: AppBarWidget(context, title: LocaleKeys.itemsForSale.tr(), showHomeButton: true),
body: SingleChildScrollView( body: Column(
child: Column( children: [
children: [ ListView(
AspectRatio( padding: const EdgeInsets.all(21),
aspectRatio: 336 / 554, children: [
child: Container( Column(
decoration: BoxDecoration( crossAxisAlignment: CrossAxisAlignment.start,
color: Colors.white, mainAxisSize: MainAxisSize.min,
borderRadius: BorderRadius.circular(10), children: [
boxShadow: [ Hero(
BoxShadow( tag: "ItemImage" + getItemsForSaleList.itemSaleID.toString(),
color: const Color(0xff000000).withOpacity(.05), transitionOnUserGestures: true,
blurRadius: 26, child: AspectRatio(
offset: const Offset(0, -3), aspectRatio: 322 / 261,
child: ClipRRect(
borderRadius: BorderRadius.circular(6),
child: Image.memory(
base64Decode(getItemsForSaleList.itemAttachments![0].content!),
fit: BoxFit.cover,
),
),
), ),
], ).paddingAll(8),
), Column(
// color: Colors.red, mainAxisSize: MainAxisSize.min,
child: Column( crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
mainAxisSize: MainAxisSize.min, getItemsForSaleList.title!.toText20(),
children: [ getItemsForSaleList.description!.toText12(maxLine: 5, color: MyColors.grey57Color),
Container( 21.height,
decoration: BoxDecoration( getItemsForSaleList.status!.toText16(color: getItemsForSaleList.status == 'Approved' ? MyColors.greenColor : MyColors.yellowColor),
boxShadow: [ "${getItemsForSaleList.quotePrice} ${getItemsForSaleList.currencyCode!}".toText20(isBold: true),
BoxShadow( 1.divider.paddingOnly(top: 16, bottom: 16),
color: const Color(0xffEBEBEB).withOpacity(1.0), Row(
blurRadius: 26, children: [
offset: const Offset(0, -3), CircularAvatar(
url: getItemsForSaleList.profilePicture,
height: 34,
width: 34,
), ),
7.width,
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [getItemsForSaleList.fullName!.toText14(), ItemDetailView("Posted on", DateUtil.formatDateToDate(DateTime.parse(getItemsForSaleList.created!), false))],
).expanded,
], ],
), ),
child: Hero( ],
tag: "ItemImage" + getItemsForSaleList.itemSaleID.toString(), ).paddingOnly(right: 16, left: 16, top: 6, bottom: 16)
transitionOnUserGestures: true,
child: AspectRatio(
aspectRatio: 148 / 127,
child: ClipRRect(
borderRadius: BorderRadius.circular(6),
child: Image.memory(
base64Decode(getItemsForSaleList.itemAttachments![0].content!),
fit: BoxFit.cover,
),
),
).paddingAll(8),
),
),
getItemsForSaleList.title!.toText20(isBold: true, color: const Color(0xff2B353E)).paddingOnly(left: 21, right: 21),
getItemsForSaleList.description!.toText12(maxLine: 5, color: const Color(0xff535353)).paddingOnly(left: 21, right: 21, bottom: 21),
getItemsForSaleList.status!.toText16(isBold: true, color: getItemsForSaleList.status == 'Approved' ? MyColors.greenColor : MyColors.yellowColor).paddingOnly(left: 21, right: 21),
"${getItemsForSaleList.quotePrice} ${getItemsForSaleList.currencyCode!}".toText20(isBold: true).paddingOnly(left: 21, right: 21, bottom: 15),
const Divider().paddingOnly(left: 21, right: 21),
Row(
children: [
CircularAvatar(
height: 40,
width: 40,
).paddingOnly(left: 21, top: 21),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
getItemsForSaleList.fullName!.toText14(isBold: true).paddingOnly(left: 7, right: 7),
"Posted on: ${DateUtil.formatDateToDate(DateTime.parse(getItemsForSaleList.created!), false)}".toText12().paddingOnly(left: 7, right: 7),
],
).paddingOnly(top: 18),
],
),
],
),
).paddingAll(21),
),
Container(
decoration: const BoxDecoration(
color: MyColors.white,
boxShadow: [
BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 1),
],
),
child: Row(
children: [
DefaultButton("Email", () async {
Uri emailLaunchUri = Uri(
scheme: 'mailto',
path: getItemsForSaleList.emailAddress,
);
launchUrl(emailLaunchUri);
}, iconData: Icons.email_sharp, isTextExpanded: false)
.insideContainer
.expanded,
DefaultButton("Call", () async {
Uri callLaunchUri = Uri(
scheme: 'tel',
path: getItemsForSaleList.mobileNumber,
);
launchUrl(callLaunchUri);
}, iconData: Icons.call_sharp, isTextExpanded: false)
.insideContainer
.expanded,
], ],
), ).objectContainerView(disablePadding: true),
), ],
], ).expanded,
), Row(
children: [
DefaultButton("Email", () async {
Uri emailLaunchUri = Uri(
scheme: 'mailto',
path: getItemsForSaleList.emailAddress,
);
launchUrl(emailLaunchUri);
}, iconData: Icons.email_sharp, isTextExpanded: false)
.expanded,
8.width,
DefaultButton("Call", () async {
Uri callLaunchUri = Uri(
scheme: 'tel',
path: getItemsForSaleList.mobileNumber,
);
launchUrl(callLaunchUri);
}, iconData: Icons.call_sharp, isTextExpanded: false)
.expanded,
],
).insideContainer,
],
), ),
); );
} }

Loading…
Cancel
Save