import 'package:dating_touchme_app/components/page_appbar.dart'; import 'package:dating_touchme_app/controller/home/event_list_controller.dart'; import 'package:dating_touchme_app/extension/ex_widget.dart'; import 'package:dating_touchme_app/generated/assets.dart'; import 'package:dating_touchme_app/model/home/event_list_data.dart'; import 'package:dating_touchme_app/pages/home/event_info.dart'; import 'package:easy_refresh/easy_refresh.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; class EventList extends StatelessWidget { const EventList({super.key}); @override Widget build(BuildContext context) { return GetX( init: EventListController(), builder: (controller){ return Scaffold( appBar: PageAppbar(title: "活动"), backgroundColor: const Color.fromRGBO(242, 242, 242, 1), body: EasyRefresh( controller: controller.listRefreshController, header: const ClassicHeader( dragText: '下拉刷新', armedText: '释放刷新', readyText: '刷新中...', processingText: '刷新中...', processedText: '刷新完成', failedText: '刷新失败', noMoreText: '没有更多数据', showMessage: false ), footer: ClassicFooter( dragText: '上拉加载', armedText: '释放加载', readyText: '加载中...', processingText: '加载中...', processedText: '加载完成', failedText: '加载失败', noMoreText: '没有更多数据', showMessage: false ), // 下拉刷新 onRefresh: () async { print('推荐列表下拉刷新被触发'); controller.page.value = 1; controller.eventList.clear(); await controller.getEventList(); controller.listRefreshController.finishRefresh(IndicatorResult.success); controller.listRefreshController.finishLoad(IndicatorResult.none); }, // 上拉加载更多 onLoad: () async { print('推荐列表上拉加载被触发, hasMore: '); controller.page.value += 1; await controller.getEventList(); }, child: Container( padding: EdgeInsets.all(15.w), child: Column( children: [ Row( children: [ Expanded( child: Container( height: 50.w, decoration: BoxDecoration( border: Border( bottom: BorderSide(width: 1, color: controller.tab.value == 0 ? const Color.fromRGBO(117, 98, 249, 1) : Colors.black) ) ), child: Center( child: Text( "我的活动", style: TextStyle( color: controller.tab.value == 0 ? const Color.fromRGBO(117, 98, 249, 1) : const Color.fromRGBO(51, 51, 51, 1) ), ), ), ).onTap(() async { if(controller.tab.value == 0) return; controller.tab.value = 0; controller.page.value = 1; controller.eventList.clear(); await controller.getEventList(); }), ), Expanded( child: Container( height: 50.w, decoration: BoxDecoration( border: Border( bottom: BorderSide(width: 1, color: controller.tab.value == 1 ? const Color.fromRGBO(117, 98, 249, 1) : Colors.black) ) ), child: Center( child: Text( "全部活动", style: TextStyle( color: controller.tab.value == 1 ? const Color.fromRGBO(117, 98, 249, 1) : const Color.fromRGBO(51, 51, 51, 1) ), ), ), ).onTap(() async { if(controller.tab.value == 1) return; controller.tab.value = 1; controller.page.value = 1; controller.eventList.clear(); await controller.getEventList(); }), ), ], ), SizedBox(height: 15.w,), Expanded( child: ListView.builder( itemCount: controller.eventList.isEmpty ? 1 : controller.eventList.length, itemBuilder: (_, index) { if(controller.eventList.isEmpty){ return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text('暂无数据'), ], ), ); } return EventItem(item: controller.eventList[index],); }, ), ) ] ) ), ), ); }, ); } } class EventItem extends StatefulWidget { final Records item; const EventItem({super.key, required this.item}); @override State createState() => _EventItemState(); } class _EventItemState extends State { @override Widget build(BuildContext context) { return Container( margin: EdgeInsets.only(bottom: 10.w), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(8.w)), color: Colors.white ), child: Column( mainAxisSize: MainAxisSize.min, children: [ ClipRRect( borderRadius: BorderRadius.vertical(top: Radius.circular(8.w)), child: Image.network( widget.item.imgList?[0].url ?? "", width: 345.w, height: 150.w, fit: BoxFit.cover, errorBuilder: (context, error, stackTrace) { return Image.asset( Assets.imagesBanner, width: 345.w, height: 150.w, fit: BoxFit.cover, ); }, ), ), Container( padding: EdgeInsets.all(10.w), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "${widget.item.name}", style: TextStyle( fontSize: 15.w, fontWeight: FontWeight.w700 ), ), SizedBox(height: 5.w,), Text( "${widget.item.depict}", style: TextStyle( fontSize: 12.w ), ), SizedBox(height: 5.w,), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "${widget.item.registrationPopulation}人已报名", style: TextStyle( fontSize: 12.w ), ), Text( "查看详情", style: TextStyle( fontSize: 12.w ), ) ], ) ], ), ) ], ), ).onTap((){ Get.to(() => EventInfo(id: widget.item.id ?? "")); }); } }