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: const EdgeInsets.fromLTRB(12, 12, 12, 12),
padding: EdgeInsets.all(8),
decoration: getCommonCard(),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
ClipRRect(
borderRadius: BorderRadius.only(topLeft: Radius.circular(kBorderRadius),topRight: Radius.circular(kBorderRadius),bottomLeft: Radius.circular(kBorderRadius),bottomRight: Radius.circular(kBorderRadius)),
child: SizedBox(
height: 120,
width: 120,
child: Stack(
children: [
Stack(
children: [
CachedNetworkImage(
imageUrl: "${dataList[index].imageList?[0]}&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: 120,);
},
errorWidget: (context, url, error) {
return Image.asset('assets/images/bg_gray.jpeg',fit: BoxFit.cover,
width: MediaQuery.of(context).size.width,
height: 120,);
},
fit: BoxFit.cover,
width: MediaQuery.of(context).size.width,
height: 120,
),
Positioned(
top: 6,
right: 6,
child: Container(
height: 24,
width: 24,
padding: const EdgeInsets.only(left: 4),
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: white
),
child: LikeButton(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
size: 12,
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;
},
),
),
),
],
),
],
),
),
),
Expanded(child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
child: Container(
margin: const EdgeInsets.only(left: 8,right: 8),
child: Text(
checkValidStringWithToDisplayCase(dataList[index].projectTitle.toString().trim()),
overflow: TextOverflow.clip,
style: getTitleStyleCard(),
),
),
),
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Gap(8),
Material(
color: Colors.transparent,
child: InkWell(
customBorder: const CircleBorder(),
onTap: () {
getShareClick(dataList[index]);
},
child: SizedBox(
width: 32,
height: 32,
child: Padding(
padding: const EdgeInsets.all(5.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: 32,
height: 32,
child: Padding(
padding: const EdgeInsets.all(5.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: () {
List<InquiryTypes> list = List<InquiryTypes>.empty(growable: true);
getInquiryClick(dataList[index],"",list);
},
child: SizedBox(
width: 32,
height: 32,
child: Padding(
padding: const EdgeInsets.all(5.0),
child: Image.asset('assets/images/ic_add.png', width: 16, height: 16,color: dataList[index].shareUrl?.websiteUrl?.isNotEmpty ?? false ? black : graySemiDark),
),
),
),
),
),
],
),
],
),
const Gap(4),
Container(
margin: const EdgeInsets.only(left: 8,right: 8),
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: 18,height: 18,),
const Gap(6),
Flexible(
child: Text(
checkValidStringWithToDisplayCase(dataList[index].sizePrice).toString(),
overflow: TextOverflow.clip,
style: const TextStyle(fontWeight: FontWeight.w400,color: black,fontSize: 14),
),
),
],
),
const Gap(4),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Image.asset("assets/images/ic_location.png",width: 18,height: 18,),
const Gap(6),
Flexible(
child: Text(checkValidStringWithToDisplayCase(dataList[index].location).toString(),
overflow: TextOverflow.clip,
style: const TextStyle(fontWeight: FontWeight.w400,color: black,fontSize: 14)
),
),
],
),
],
),
),
const Gap(6),
Container(
margin: const EdgeInsets.only(left: 10,right: 8),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Stack(
alignment: Alignment.center,
children: [
SizedBox(
height: 16,width: 16,
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: 10,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: 14)
),
),
],
),
),
const Gap(8),
Visibility(
visible: (ISWHITELABEL && getIsCp()) ? true : false ,
child: dataList[index].inquiryTypes != null ? Container(
height: 30,
margin: const EdgeInsets.only(left: 8),
alignment: Alignment.centerLeft,
child: ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.horizontal,
physics: const AlwaysScrollableScrollPhysics(),
itemCount: dataList[index].inquiryTypes!.length,
itemBuilder: (context, indexInner) {
return GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: (){
getInquiryClick(dataList[index],checkValidString(dataList[index].inquiryTypes![indexInner].type),dataList[index].inquiryTypes!);
},
child: Container(
alignment: Alignment.center,
margin: const EdgeInsets.only(right: 10),
padding: const EdgeInsets.only(left: 12, right: 12,bottom: 2,top: 2),
decoration: BoxDecoration(
color: white,
borderRadius: const BorderRadius.all(Radius.circular(6)),
border: Border.all(color: black, width: 0.5),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
checkValidStringWithToDisplayCase(dataList[index].inquiryTypes![indexInner].type),
style: const TextStyle(
fontSize: 14,
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,)*/
],
),
),
);
}