123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- import 'package:cs_resources/generated/assets.dart';
- import 'package:cs_resources/theme/app_colors_theme.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter/widgets.dart';
- import 'package:flutter_hooks/flutter_hooks.dart';
- import 'package:hooks_riverpod/hooks_riverpod.dart';
- import 'package:plugin_platform/engine/toast/toast_engine.dart';
- import 'package:shared/utils/color_utils.dart';
- import 'package:shared/utils/ext_dart.dart';
- import 'package:shared/utils/log_utils.dart';
- import 'package:widgets/ext/ex_widget.dart';
- import 'package:widgets/my_load_image.dart';
- import 'package:widgets/my_text_view.dart';
- import '../../../constants_services.dart';
- // 'id':1,
- // 'service_type': 0, // 0 房屋保洁 1 空调保洁 2 维修
- // 'cover_img': 'https://img2.baidu.com/it/u=3489233687,2364672159&fm=253&fmt=auto&app=120&f=JPEG?w=507&h=500',
- // 'resources': ['https://img2.baidu.com/it/u=3489233687,2364672159&fm=253&fmt=auto&app=120&f=JPEG?w=507&h=500'],
- // 'title': 'House Cleaning Services',
- // 'price': 66,
- // 'unit': '/hr',
- // 'liked': true,
- // 'likes_count': 1212,
- // 'company_name': 'HONG YE GROUP PTE LTD',
- class HomeServiceCard extends StatelessWidget {
- Map<String, dynamic>? serviceType = servicesConstants.servicesType['houseCleaning'];
- Map<String, dynamic> itemObj;
- double? cardHeight;
- final Function()? onTap;
- final Function(dynamic)? onClickColleciotn;
- HomeServiceCard({
- Key? key,
- this.serviceType,
- required this.itemObj,
- this.onTap,
- this.onClickColleciotn,
- double? cardHeight,
- }) : super(key: key) {
- this.cardHeight ??= 170;
- }
- @override
- Widget build(BuildContext context) {
- List? card_resources = itemObj.getValue<List>("resources", [])?? [];
- String card_img = card_resources.length>0? card_resources[0]:"";
- String card_title = itemObj.getValue("title", "");
- final unit = itemObj.getValue("unit", "");
- int card_price = itemObj.getValue("price", "");
- String card_created_at = itemObj.getValue("created_at", "");
- bool card_liked = itemObj.getValue("liked", false);
- int card_likes_count = itemObj.getValue("likes_count", 0);
- final company_name = itemObj.getValue("company_name", "");
- return Column(
- children: [
- // 图片
- Row(
- mainAxisAlignment: MainAxisAlignment.center,
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Expanded(
- child: ClipRRect(
- borderRadius: const BorderRadius.only(topLeft: Radius.circular(8), topRight: Radius.circular(8),),
- child: MyLoadImage(
- card_img,
- width: 172.5,
- height: 80.5.ap,
- isCircle: false,
- fit: BoxFit.cover,
- ),
- ),
- ),
- ],
- ),
- // 标题
- Padding(
- padding: const EdgeInsets.only(left: 10, right: 10, top: 10,),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- Expanded(
- child: SizedBox(
- height: 30.ap,
- child: MyTextView(
- card_title,
- maxLines: 2,
- isTextEllipsis: true,
- textAlign: TextAlign.left,
- textColor: context.appColors.textBlack,
- fontSize: 15,
- isFontRegular: true,
- ),
- ),
- ),
- ],
- ),
- ),
- // 价格 及 收藏
- Padding(
- padding: const EdgeInsets.only(left: 10, right: 10,top: 0, bottom: 0),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceAround,
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Expanded(
- child: Row(
- mainAxisAlignment: MainAxisAlignment.start,
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- MyTextView(
- 'from',
- maxLines: 1,
- isTextEllipsis: true,
- textAlign: TextAlign.start,
- textColor: ColorUtils.string2Color('#666666'),
- fontSize: 11,
- isFontMedium: true,
- ),
- MyTextView(
- '\$$card_price',
- maxLines: 1,
- isTextEllipsis: true,
- textAlign: TextAlign.start,
- textColor: ColorUtils.string2Color('#4161D0'),
- fontSize: 15,
- isFontMedium: true,
- marginLeft: 2,
- ),
- MyTextView(
- '$unit',
- maxLines: 1,
- isTextEllipsis: true,
- textAlign: TextAlign.start,
- textColor: ColorUtils.string2Color('#666666'),
- fontSize: 11,
- isFontMedium: true,
- ),
- ],
- ),
- ),
- // 动态的 收藏数
- CollectionWidget(
- collectionNum: card_likes_count,
- isCollection: card_liked,
- onClickColleciotn: onClickColleciotn,
- ),
- ],
- ),
- ),
- // 公司名称
- Expanded(
- child: Padding(
- padding: const EdgeInsets.only(bottom: 5),
- child: MyTextView(
- company_name,
- maxLines: 1,
- isTextEllipsis: true,
- textAlign: TextAlign.start,
- marginLeft: 13,
- fontSize: 11,
- textColor: ColorUtils.string2Color('#666666'),
- alignment: Alignment.centerLeft,
- isFontRegular: true,
- ),
- ),
- )
- ],
- );
- }
- }
- class CollectionWidget extends HookConsumerWidget {
- int collectionNum = 0;
- bool isCollection = false;
- final Function(dynamic)? onClickColleciotn;
- CollectionWidget({
- Key? key,
- required this.collectionNum,
- required this.isCollection,
- this.onClickColleciotn,
- }) : super(key: key);
- @override
- Widget build(BuildContext context, WidgetRef ref) {
- final collectionNumState = useState(collectionNum);
- final isCollectionState = useState(isCollection);
- return Container(
- width: 60,
- height: 30,
- alignment: Alignment.center,
- // decoration: BoxDecoration(
- // color: ColorUtils.string2Color('#E5E5E5'),
- // borderRadius: BorderRadius.circular(15),
- // ),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- MyTextView(
- '${collectionNumState.value}',
- textColor: context.appColors.textBlack,
- fontSize: 14,
- isFontRegular: true,
- marginRight: 7,
- ),
- MyLoadImage(
- isCollectionState.value? Assets.communityLikeActive: Assets.communityLike,
- width: 14.1,
- height: 14,
- )
- ]
- // 点击 收餐/取消收藏
- ).onTap(() async{
- // Log.d("点击了收藏按钮 ${isCollectionState.value}");
- // ToastEngine.show("点击了收藏按钮 ${isCollectionState.value}");
- final result = await onClickColleciotn?.call(isCollectionState.value);
- if(result !=null && result){
- isCollectionState.value = !isCollectionState.value;
- collectionNumState.value = (collectionNumState.value + (isCollectionState.value? 1: -1))<0? 0: (collectionNumState.value + (isCollectionState.value? 1: -1));
- if(isCollectionState.value){
- // ToastEngine.show("Collect Success");
- }else {
- // ToastEngine.show("Cancel Collect Success");
- }
- }
- })
- );
- }
- }
|