import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/main.dart'; import 'package:huixiang/data/activity.dart'; import 'package:huixiang/data/base_data.dart'; import 'package:huixiang/data/page.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; import 'package:huixiang/utils/event_type.dart'; import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/view_widget/classic_header.dart'; import 'package:huixiang/view_widget/custom_image.dart'; import 'package:huixiang/view_widget/my_appbar.dart'; import 'package:keframe/keframe.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; class ActivityList extends StatefulWidget { @override State createState() { return _ActivityList(); } } class _ActivityList extends State with AutomaticKeepAliveClientMixin { ApiService? apiService; @override void initState() { super.initState(); eventBus.on().listen((event) { if (event.type < 3) { setState(() {}); } }); } List? activityList; queryActivity() async { final SharedPreferences value = await SharedPreferences.getInstance(); apiService = ApiService(Dio(), context: context, token: value.getString('token')); BaseData>? baseData = await apiService?.informationList({ "pageNum": 1, "pageSize": 10, "searchKey": "", "type": 1, "state": 1 }).catchError((error) { _refreshController.refreshFailed(); }); if (baseData?.isSuccess ?? false) { _refreshController.refreshCompleted(); activityList = baseData?.data?.list ?? []; } } @override void dispose() { super.dispose(); _refreshController.dispose(); } RefreshController _refreshController = RefreshController(); @override Widget build(BuildContext context) { super.build(context); return Container( child: FutureBuilder( future: queryActivity(), builder: (context, snapshot) { return Scaffold( appBar: MyAppBar( background: Color(0xFFFFFFFF), leadingColor: Colors.black, title:S.of(context).huodongliebiao, titleColor: Colors.black, titleSize: 18.sp, ), body: SizeCacheWidget( child: SmartRefresher( controller: _refreshController, enablePullDown: true, enablePullUp: false, header: MyHeader(), physics: BouncingScrollPhysics(), onRefresh: () { setState(() {}); }, child: ListView.builder( itemCount: activityList?.length ?? 0, physics: NeverScrollableScrollPhysics(), itemBuilder: (context, position) { return InkWell( onTap: () { Navigator.of(context).pushNamed( '/router/web_page', arguments: {"activityId": activityList![position].id}, ); }, child: FrameSeparateWidget( child: activityItem(activityList![position]), placeHolder: AspectRatio( aspectRatio: 1.34, child: Container( margin: EdgeInsets.symmetric( horizontal: 16.w, vertical: 8.h, ), decoration: BoxDecoration( color: Colors.white, boxShadow: [ BoxShadow( color: Colors.black.withAlpha(12), offset: Offset(0, 3), blurRadius: 14, spreadRadius: 0, ), ], borderRadius: BorderRadius.circular(8), ), ), ), ), ); }, ), ), ), ); }, ), ); } Widget activityItem(Activity activity) { return Container( margin: EdgeInsets.only( left: 16.w, right: 16.w, top: 8.h, bottom: 12.h, ), decoration: BoxDecoration( color: Colors.white, boxShadow: [ BoxShadow( color: Colors.black.withAlpha(12), offset: Offset(0, 3), blurRadius: 14, spreadRadius: 0, ) ], borderRadius: BorderRadius.circular(8), ), child: Column( children: [ MImage( activity.coverImg ?? "", aspectRatio: 2.1, radius: BorderRadius.only( topLeft: Radius.circular(8), topRight: Radius.circular(8), ), fit: BoxFit.cover, errorSrc: "assets/image/default_2_1.webp", fadeSrc: "assets/image/default_2_1.webp", ), Container( padding: EdgeInsets.only( left: 16.w, right: 16.w, top: 8.h, bottom: 12.h, ), child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( activity.mainTitle ?? "", maxLines: 1, overflow: TextOverflow.ellipsis, style: TextStyle( fontWeight: MyFontWeight.medium, fontSize: 14.sp, color: Colors.black, ), ), SizedBox( height: 4.h, ), Text( activity.viceTitle ?? "", maxLines: 1, overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 10.sp, fontWeight: MyFontWeight.regular, color: Color(0xFF4C4C4C), ), ), SizedBox( height: 12.h, ), ConstrainedBox( constraints: BoxConstraints( maxWidth: double.infinity, minWidth: double.infinity, ), child: Row( crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( activity.storeName ?? "", style: TextStyle( color: Color(0xFF060606), fontWeight: MyFontWeight.regular, fontSize: 12.sp, ), ), Row( // crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.center, children: [ Text( activity.startTime?.split(" ")[0] ?? "", style: TextStyle( color: Color(0xFFB5B5B5), fontSize: 12.sp, fontWeight: MyFontWeight.regular, ), ), SizedBox( width: 4.w, ), Text( activity.startTime?.split(" ")[1] ?? "", style: TextStyle( color: Color(0xFFB5B5B5), fontSize: 12.sp, fontWeight: MyFontWeight.regular, ), ), ], ), ], ), ), ], ), ), ], ), ); } @override bool get wantKeepAlive => true; }