import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import '../../../../app_localizations.dart'; import '../../../../chatvibe_core/utilities/at_banner_utils.dart'; import '../../../../chatvibe_core/utilities/at_loading_manager.dart'; import '../../../../chatvibe_data/models/enum/at_banner_type.dart'; import '../../../../chatvibe_data/sources/repositories/config_repository_imp.dart'; import '../../../../chatvibe_domain/models/res/at_index_banner_res.dart'; import '../../../../chatvibe_ui/components/at_compontent.dart'; class HomeEventPage extends StatefulWidget { @override _HomeEventPageState createState() => _HomeEventPageState(); } class _HomeEventPageState extends State with SingleTickerProviderStateMixin { bool isLoading = false; List homeBanners = []; final RefreshController _refreshController = RefreshController( initialRefresh: false, ); @override void initState() { super.initState(); _loadData(); } @override Widget build(BuildContext context) { return Scaffold( resizeToAvoidBottomInset: false, backgroundColor: Colors.transparent, body: Stack( alignment: AlignmentDirectional.bottomCenter, children: [ SmartRefresher( enablePullDown: true, enablePullUp: false, controller: _refreshController, onRefresh: () { _loadData(); }, onLoading: () {}, child: homeBanners.isNotEmpty ? SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.min, children: [_banner()], ), ) : GestureDetector( behavior: HitTestBehavior.opaque, onTap: () { _loadData(); }, child: isLoading ? Center(child: CupertinoActivityIndicator()) : mainEmpty( msg: ATAppLocalizations.of(context)!.noData, ), ), ), ], ), ); } _banner() { return homeBanners.isNotEmpty ? Container( margin: EdgeInsets.symmetric(horizontal: 10.w), child: ListView.separated( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), itemCount: homeBanners.length, // 列表项数量 padding: EdgeInsets.only(bottom: 15.w), itemBuilder: (context, index) { return GestureDetector( onTap: () { print('ads:${homeBanners[index].toJson()}'); ATBannerUtils.openBanner(homeBanners[index], context); }, child: netImage( height: 98.w, url: homeBanners[index].cover ?? "", fit: BoxFit.contain, borderRadius: BorderRadius.all(Radius.circular(12.w)), ), ); }, separatorBuilder: (BuildContext context, int index) { return SizedBox(height: 10.w); }, ), ) : Container(); } _loadData() async { setState(() { isLoading = true; }); ATLoadingManager.exhibitOperation(); try { var banners = await ConfigRepositoryImp().getBanner(); homeBanners.clear(); for (var v in banners) { if ((v.displayPosition ?? "").contains(ATBannerType.HOME_ALERT.name)) { homeBanners.add(v); } } _refreshController.refreshCompleted(); _refreshController.loadComplete(); isLoading = false; if (mounted) setState(() {}); ATLoadingManager.veilRoutine(); } catch (e) { _refreshController.refreshCompleted(); _refreshController.loadComplete(); isLoading = false; if (mounted) setState(() {}); ATLoadingManager.veilRoutine(); } } }