import 'package:flutter/material.dart' hide RefreshIndicator, RefreshIndicatorState; import 'package:flutter_gifimage/flutter_gifimage.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:new_recook/gen/assets.gen.dart'; import 'package:pull_to_refresh_flutter3/pull_to_refresh_flutter3.dart'; class HomeGifHeader extends RefreshIndicator { HomeGifHeader() : super( height: ScreenUtil().statusBarHeight + 80.0, refreshStyle: RefreshStyle.Follow); @override State createState() { return _HomeGifHeaderState(); } } class _HomeGifHeaderState extends RefreshIndicatorState with SingleTickerProviderStateMixin { late GifController _gifController; @override void initState() { _gifController = GifController(vsync: this, value: 1); super.initState(); } @override void onModeChange(RefreshStatus? mode) { if (mode == RefreshStatus.refreshing) { _gifController.repeat( min: 0, max: 38, period: Duration(milliseconds: 1000)); } super.onModeChange(mode); } @override Future endRefresh() async { double value = _gifController.value; if (value < 38) { await Future.delayed( Duration(milliseconds: ((39 - value) / 39 * 1000).toInt() - 100), () { _gifController.value = 38; // _gifController.stop(); }); return super.endRefresh(); } else { return super.endRefresh(); } // _gifController.value = 38; } @override void resetValue() { _gifController.value = 0; super.resetValue(); } @override Widget buildContent(BuildContext context, RefreshStatus mode) { return Container( height: ScreenUtil().statusBarHeight + 80, width: 80, padding: EdgeInsets.only(top: ScreenUtil().statusBarHeight), child: GifImage( image: AssetImage(Assets.images.homeRefreshHeader3.path), controller: _gifController, height: 80, width: 80, fit: BoxFit.fitHeight, ), ); } @override void dispose() { _gifController.dispose(); super.dispose(); } }