Implementation
projectBlockNew(int index, void Function(VoidCallback fn) setState, List<ProjectList> dataList) {
return Bounce(
duration: const Duration(milliseconds: 200),
onPressed: () {
/*List<String> listImage = [];
listImage.add("${dataList[index].bannerData?.imageWebFull}&h=480&zc=2");
if (dataList[index].campaignArray?.isNotEmpty ?? false)
{
for (var i=0; i < dataList[index].campaignArray!.length; i++)
{
listImage.add(checkValidStringNew(dataList[index].campaignArray![i].bannerFull));
}
}
Navigator.push(context, PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) => FullScreenImageNew("", listImage, 0),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
const begin = Offset(0.0, 1.0);
const end = Offset.zero;
const curve = Curves.ease;
var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve));
return SlideTransition(
position: animation.drive(tween),
child: child,
);
},
));*/
startActivity(context, ProjectWebPageScreen(dataList[index],masterUserId));
},
child: Container(
margin: getCommonMarginCard(),
decoration: getCommonCard(),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ClipRRect(
borderRadius: BorderRadius.only(topLeft: Radius.circular(kBorderRadius),topRight: Radius.circular(kBorderRadius)),
child: SizedBox(
height: 320,
child: Stack(
children: [
PageView.builder(
controller: dataList[index].controller,
itemCount: dataList[index].imageList?.length ?? 0,
physics: const BouncingScrollPhysics(),
scrollDirection: Axis.horizontal,
itemBuilder: (context, indexInner) {
return Stack(
children: [
CachedNetworkImage(
imageUrl: "${dataList[index].imageList?[indexInner]}&h=500&q=100",
placeholder: (context, url) {
return Image.asset('assets/images/bg_gray.jpeg',fit: BoxFit.cover,
width: MediaQuery.of(context).size.width,
height: 320,);
},
errorWidget: (context, url, error) {
return Image.asset('assets/images/bg_gray.jpeg',fit: BoxFit.cover,
width: MediaQuery.of(context).size.width,
height: 320,);
},
fit: BoxFit.cover,
width: MediaQuery.of(context).size.width,
height: 320,
),
Positioned(
top: 12,
right: 12,
child: Container(
height: 36,
width: 36,
padding: const EdgeInsets.only(left: 4),
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: white
),
child: LikeButton(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
size: 22,
isLiked: dataList[index].isFavoriteMark == 1,
circleColor: const CircleColor(start: black, end: gray),
bubblesColor: const BubblesColor(
dotPrimaryColor: black,
dotSecondaryColor: gray,
),
likeBuilder: (bool isLiked) {
return Image.asset(
isLiked ? "assets/images/saved_fill.png" : "assets/images/saved.png",
color: isLiked ? black : black,
);
},
onTap: (isLike) async {
setState(() {
if (dataList[index].isFavoriteMark == 1)
{
dataList[index].isFavoriteMark = 0;
}
else
{
dataList[index].isFavoriteMark = 1;
}
});
getFavProject(dataList[index]);
var dataGetSet = dataList[index];
dataList.remove(dataGetSet);
dataList.insert(0, dataGetSet);
return true;
},
),
),
),
],
);
},
),
Positioned(
bottom: 22,
child: Visibility(
visible: checkImageLenth(dataList[index].imageList!) >1,
child: Container(
width: MediaQuery.of(context).size.width - 44,
alignment: Alignment.center,
child: SmoothPageIndicator(
controller: dataList[index].controller,
count: dataList[index].imageList?.length ?? 0,
effect: const ScrollingDotsEffect(
fixedCenter: false,
dotHeight: 6,
dotWidth: 6,
activeDotColor: white,
dotColor: grayNew,
// strokeWidth: 5,
),
),
),
),
),
],
),
),
),
const Gap(12),
Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
child: Container(
margin: const EdgeInsets.only(left: 12,right: 12),
child: Text(
checkValidStringWithToDisplayCase(dataList[index].projectTitle.toString().trim()),
overflow: TextOverflow.clip,
style: getTitleStyleCard(),
),
),
),
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Gap(12),
Material(
color: Colors.transparent,
child: InkWell(
customBorder: const CircleBorder(),
onTap: () {
getShareClick(dataList[index]);
},
child: SizedBox(
width: 42,
height: 42,
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Image.asset('assets/images/ic_share.png', width: 16, height: 16,color: dataList[index].shareUrl?.websiteUrl?.isNotEmpty ?? false ? black : graySemiDark),
),
),
),
),
Material(
color: Colors.transparent,
child: InkWell(
customBorder: const CircleBorder(),
onTap: () {
getDownloadClick(dataList[index]);
},
child: SizedBox(
width: 42,
height: 42,
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Image.asset('assets/images/ic_view.png', width: 16, height: 16,color: dataList[index].shareUrl?.websiteUrl?.isNotEmpty ?? false ? black : graySemiDark ),
),
),
),
),
Visibility(
visible: (ISWHITELABEL && getIsCp()) ? false : true,
child: Material(
color: Colors.transparent,
child: InkWell(
customBorder: const CircleBorder(),
onTap: () {
getInquiryClick(dataList[index],"");
},
child: SizedBox(
width: 42,
height: 42,
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Image.asset('assets/images/ic_add.png', width: 16, height: 16,color: dataList[index].shareUrl?.websiteUrl?.isNotEmpty ?? false ? black : graySemiDark),
),
),
),
),
),
],
),
],
),
const Gap(8),
Container(
margin: const EdgeInsets.only(left: 12,right: 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Image.asset("assets/images/ic_building.png",width: 24,height: 24,),
const Gap(6),
Flexible(
child: Text(
checkValidStringWithToDisplayCase(dataList[index].sizePrice).toString(),
overflow: TextOverflow.clip,
style: const TextStyle(fontWeight: FontWeight.w400,color: black,fontSize: 16),
),
),
],
),
const Gap(6),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Image.asset("assets/images/ic_location.png",width: 24,height: 24,),
const Gap(6),
Flexible(
child: Text(checkValidStringWithToDisplayCase(dataList[index].location).toString(),
overflow: TextOverflow.clip,
style: const TextStyle(fontWeight: FontWeight.w400,color: black,fontSize: 16)
),
),
],
),
],
),
),
const Gap(8),
Container(
margin: const EdgeInsets.only(left: 12,right: 12),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Stack(
alignment: Alignment.center,
children: [
SizedBox(
height: 24,width: 24,
child: CircularProgressIndicator(
value: double.parse(dataList[index].constructionData2?.progressPercent.toString() ?? "0") / 100,
color: Colors.green,
strokeWidth: 2,
backgroundColor: gray,
),
),
Text(dataList[index].constructionData2?.progressPercent.toString() ?? "0",style: const TextStyle(fontSize: 12,color: black,fontWeight: FontWeight.w400),)
],
),
const Gap(6),
Flexible(
child: Text(checkValidStringWithToDisplayCase(dataList[index].status),
overflow: TextOverflow.clip,
style: const TextStyle(fontWeight: FontWeight.w400,color: black,fontSize: 16)
),
),
],
),
),
const Gap(12),
Visibility(
visible: (ISWHITELABEL && getIsCp()) ? true : false ,
child: dataList[index].inquiryTypes != null ? Container(
height: 40,
margin: const EdgeInsets.only(left: 12),
alignment: Alignment.centerLeft,
child: ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.horizontal,
physics: const NeverScrollableScrollPhysics(),
itemCount: dataList[index].inquiryTypes!.length,
itemBuilder: (context, indexInner) {
return GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: (){
getInquiryClick(dataList[index],checkValidString(dataList[index].inquiryTypes![indexInner].type));
},
child: Container(
alignment: Alignment.center,
margin: const EdgeInsets.only(right: 12),
padding: const EdgeInsets.only(left: 20, right: 20,bottom: 10,top: 10),
decoration: BoxDecoration(
color: white,
borderRadius: const BorderRadius.all(Radius.circular(22)),
border: Border.all(color: grayNew, width: 1),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
checkValidStringWithToDisplayCase(dataList[index].inquiryTypes![indexInner].type),
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w400,
color: black,
),
overflow: TextOverflow.ellipsis,
),
],
),
),
);
},
),
) :Container(),
)
],
),
/* const Gap(2),
const Divider(color: graySemiDark ,height: 0.3,thickness: 0.3,indent: 12,endIndent: 12),*/
const Gap(12),
/*const Divider(color: grayDarkNew,thickness: 0.7,height: 0.7,)*/
],
),
),
);
}