import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:intl/intl.dart'; import 'package:job_app/config/palette.dart'; import 'package:job_app/models/employmentoffer.dart'; import 'package:job_app/services/wishlist.dart'; import 'package:job_app/singletons/wishlist.dart'; import 'package:provider/provider.dart'; class EmploymentOfferCard extends StatefulWidget { final int offerIndex; final List passedOffers; EmploymentOfferCard({this.offerIndex,this.passedOffers}); @override State createState() => _EmploymentOfferCardState(); } class _EmploymentOfferCardState extends State { bool isButtonLoading=false; String icon ='assets/icons/empty_heart.svg'; bool isFav=false; String emptyHeart="assets/icons/empty_heart.svg"; String fullHeart="assets/icons/full_heart.svg"; List offer=[]; @override void initState() { // TODO: implement initState super.initState(); } @override Widget build(BuildContext context) { offer=widget.passedOffers; final format= new DateFormat('dd/mm/ yyyy'); DateTime dateTime =new DateTime.fromMicrosecondsSinceEpoch(offer[widget.offerIndex].timestmp*1000); String date= format.format(dateTime); String imageUrl = "https://server.thejob.net"; return Column( children: [ Container( child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ if (offer[widget.offerIndex].boosted) Container( width: 40, decoration: BoxDecoration( color: Palette.primary, borderRadius: BorderRadius.only( bottomRight: Radius.circular(5))), child: Text( 'ADS', textAlign: TextAlign.center, style: TextStyle( color: Colors.white, fontSize: 10, fontFamily: 'Montserrat'), ), ), Padding( padding: EdgeInsets.only( top: offer[widget.offerIndex].boosted ? 5 : 18), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( height:50, width: 60, child: Image( fit: BoxFit.fill, image: NetworkImage( offer[widget.offerIndex].company.image!=null? imageUrl+offer[widget.offerIndex].company.image.url:"https://i2.wp.com/www.iedunote.com/img/23559/what-is-a-company-scaled.jpg?fit=2560%2C1696&quality=100&ssl=1" ), ), decoration: BoxDecoration( border: Border.all(color: Palette.disabled, width: 1), borderRadius: BorderRadius.circular(4)), ), Padding( padding: const EdgeInsets.fromLTRB(10, 0, 0, 0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( offer[widget.offerIndex].company.expeditorname!=null?offer[widget.offerIndex].company.expeditorname:"null", style: TextStyle(fontFamily: 'Montserrat',fontSize: 14), ), SizedBox( height: 6, ), Row( children: [ SvgPicture.asset( 'assets/icons/location_pin.svg'), SizedBox( width: 2, ), Text( offer[widget.offerIndex].company.country +" " +offer[widget.offerIndex].company.city, style: TextStyle( fontSize: 10, fontFamily: 'MontserratRegular'), ), SizedBox( width: 12, ), SvgPicture.asset( 'assets/icons/work_time.svg'), SizedBox( width: 2, ), Text( offer[widget.offerIndex].schedule.toString(), style: TextStyle( fontSize: 10, fontFamily: 'MontserratRegular'), ), ], ), ], ), ), Padding( padding: EdgeInsets.fromLTRB(20, 4, 0, 0), child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.end, children: [ Text('$date', style: TextStyle( fontFamily: 'MontserratRegular', fontSize: 10), ), if(isButtonLoading) SizedBox(height: 10,), if(offer!=null) ChangeNotifierProvider.value( value :WishlistSingleTons(), child: Consumer( builder: (context,data,child) { if(offer.isNotEmpty && wishlistSingleTons.wishlist!=null){ if(offer.isNotEmpty && wishlistSingleTons.wishlist.offer.where((element) => element.id==offer[widget.offerIndex].id).isNotEmpty){ isFav=true; }else{ isFav=false; } } return Container( height: !isButtonLoading?30:15, width: !isButtonLoading?30:15, child: !isButtonLoading?IconButton( icon: SvgPicture.asset( isFav?fullHeart:emptyHeart), onPressed: () async{ setState(() { isButtonLoading=true; }); WishlistService wishlist= WishlistService(); await wishlist.addRemoveFromWishlist(offer[widget.offerIndex].id); bool testingIt=wishlistSingleTons.wishlist.offer.where((element) => element.id==offer[widget.offerIndex].id).isEmpty; if(testingIt){ print("access if"); wishlistSingleTons.addToWishlist(offer[widget.offerIndex]); wishlistSingleTons.wishlist.count++; }else if( !testingIt){ print("access else if"); wishlistSingleTons.removeFromWishlist(offer[widget.offerIndex]); wishlistSingleTons.wishlist.count--; } setState(() { isButtonLoading=false; }); }):Image(image: AssetImage("assets/loading.gif"),height: 12,), ); } ), ) ], ), ) ], ), ) ], ), ], ), width: double.maxFinite, height: 80, margin: EdgeInsets.symmetric(vertical: 10), decoration: BoxDecoration( border: offer[widget.offerIndex].boosted ? Border.all(color: Palette.primary, width: 2) : Border.all(color: Colors.grey, width: 1), borderRadius: BorderRadius.circular(4)), ) ], ); } }