You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.1 KiB
82 lines
2.1 KiB
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<StatefulWidget> createState() {
|
|
return _HomeGifHeaderState();
|
|
}
|
|
}
|
|
|
|
class _HomeGifHeaderState extends RefreshIndicatorState<HomeGifHeader>
|
|
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<void> 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();
|
|
}
|
|
}
|