import 'package:easy_refresh/easy_refresh.dart'; import 'package:flutter/material.dart'; import 'package:flutter_common/widget/common_widget.dart'; import 'package:food_hub_app/provider/food_provider.dart'; import 'package:food_hub_app/widgets/common/easy_refresh.dart'; import 'package:food_hub_app/widgets/moment/card.dart'; import 'package:provider/provider.dart'; class MomentPage extends StatefulWidget { const MomentPage({super.key}); @override State createState() => _MomentPageState(); } class _MomentPageState extends State { // 初始化EasyRefresh控制器 final EasyRefreshController _freshController = EasyRefreshController( controlFinishRefresh: true, controlFinishLoad: true, ); final ScrollController _scrollController = ScrollController(); bool _showScrollToTop = false; @override void initState() { super.initState(); _scrollController.addListener(_onScroll); // 初始化加载数据 WidgetsBinding.instance.addPostFrameCallback((_) { context.read().refreshMomentList(); }); } @override void dispose() { _scrollController.removeListener(_onScroll); _freshController.dispose(); _scrollController.dispose(); super.dispose(); } // 下拉刷新 Future _onRefresh() async { await context.read().refreshMomentList(); _freshController.finishRefresh(); } // 上拉加载 Future _onLoad() async { final provider = context.read(); if (provider.hasMore) { await provider.loadMoreMomentList(); _freshController.finishLoad(IndicatorResult.success); } else { _freshController.finishLoad(IndicatorResult.noMore); } } void _onScroll() { // 当滚动距离超过300时显示返回顶部按钮 if (_scrollController.offset > 300) { if (!_showScrollToTop) { setState(() { _showScrollToTop = true; }); } } else { if (_showScrollToTop) { setState(() { _showScrollToTop = false; }); } } } // 滚动到顶部 void _scrollToTop() => scrollToTopAnimateTo(_scrollController); Widget _buildMomentList(FoodProvider provider) { return ListView.separated( controller: _scrollController, itemCount: provider.momentList.length, separatorBuilder: (context, index) => SizedBox(height: 8), itemBuilder: (context, index) { return MomentCard(moment: provider.momentList[index], isUser: false); }, ); } @override Widget build(BuildContext context) { final provider = context.watch(); // 空状态显示 if (provider.momentList.isEmpty) { return buildEmptyData(); } // 有数据时显示列表 return Stack( children: [ buildEasyRefresh( freshController: _freshController, onRefresh: _onRefresh, onLoad: _onLoad, body: Stack( children: [ if (provider.isLoading) buildLoadingIndicator() else _buildMomentList(provider), ], ), ), // 返回顶部按钮 if (_showScrollToTop) buildScrollToTop(context: context, scrollToTop: _scrollToTop), ], ); } }