Skip to content

Commit 06a71b5

Browse files
committed
更新动画
1 parent 1ae9ac5 commit 06a71b5

File tree

4 files changed

+50
-5
lines changed

4 files changed

+50
-5
lines changed

lib/page/dynamic_page.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class _DynamicPageState extends State<DynamicPage>
4646

4747
@override
4848
requestRefresh() async {
49+
await Future.delayed(Duration(seconds: 1));
4950
return await dynamicBloc.requestRefresh(_getStore().state.userInfo?.login);
5051
}
5152

lib/widget/pull/custom_bouncing_scroll_physics.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ class CustomBouncingScrollPhysics extends ScrollPhysics {
2626

2727
/// -2 是因为有时候会只到 iosRefreshHeight - 1
2828
/// 会导致触发重新又从0开始的问题
29-
if (position.pixels.abs() >= (refreshHeight - 2)) {
29+
/*if (position.pixels.abs() >= (refreshHeight - 2)) {
3030
return 0;
31-
}
31+
}*/
3232
final double overscrollPastStart =
3333
max(position.minScrollExtent - position.pixels, 0.0);
3434
final double overscrollPastEnd =
@@ -45,8 +45,6 @@ class CustomBouncingScrollPhysics extends ScrollPhysics {
4545

4646
final double direction = offset.sign;
4747

48-
print("easing $easing overscrollPastStart $overscrollPastStart");
49-
5048
return direction * _applyFriction(overscrollPast, offset.abs(), friction);
5149
}
5250

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import 'package:flare_dart/math/mat2d.dart';
2+
import 'package:flare_flutter/flare.dart';
3+
import 'package:flare_flutter/flare_controller.dart';
4+
5+
mixin GSYFlarePullController implements FlareController {
6+
ActorAnimation _pullAnimation;
7+
8+
double pulledExtentFlare = 0;
9+
double _refreshTriggerPullDistance = 140;
10+
11+
@override
12+
void initialize(FlutterActorArtboard artboard) {
13+
_pullAnimation = artboard.getAnimation("Earth Moving");
14+
}
15+
16+
@override
17+
void setViewTransform(Mat2D viewTransform) {}
18+
19+
@override
20+
bool advance(FlutterActorArtboard artboard, double elapsed) {
21+
if(getPlayAuto) {
22+
return false;
23+
}
24+
double animationPosition = pulledExtentFlare / _refreshTriggerPullDistance;
25+
animationPosition *= animationPosition;
26+
_pullAnimation.apply(
27+
_pullAnimation.duration * animationPosition, artboard, 1.0);
28+
return true;
29+
}
30+
31+
bool get getPlayAuto;
32+
33+
}

lib/widget/pull/gsy_pull_new_load_widget.dart

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:gsy_github_app_flutter/common/utils/common_utils.dart';
77
import 'dart:math';
88

99
import 'custom_bouncing_scroll_physics.dart';
10+
import 'gsy_flare_pull_controller.dart';
1011

1112
const double iosRefreshHeight = 140;
1213
const double iosRefreshIndicatorExtent = 100;
@@ -40,13 +41,17 @@ class GSYPullLoadWidget extends StatefulWidget {
4041
_GSYPullLoadWidgetState createState() => _GSYPullLoadWidgetState();
4142
}
4243

43-
class _GSYPullLoadWidgetState extends State<GSYPullLoadWidget> {
44+
class _GSYPullLoadWidgetState extends State<GSYPullLoadWidget>
45+
with GSYFlarePullController {
4446
ScrollController _scrollController;
4547

4648
bool isRefreshing = false;
4749

4850
bool isLoadMoring = false;
4951

52+
@override
53+
ValueNotifier<bool> isActive = ValueNotifier<bool>(true);
54+
5055
@override
5156
void initState() {
5257
_scrollController = widget.scrollController ?? new ScrollController();
@@ -288,13 +293,20 @@ class _GSYPullLoadWidgetState extends State<GSYPullLoadWidget> {
288293
);
289294
}
290295

296+
bool playAuto = false;
297+
298+
@override
299+
bool get getPlayAuto => playAuto;
300+
291301
Widget buildSimpleRefreshIndicator(
292302
BuildContext context,
293303
IOS.RefreshIndicatorMode refreshState,
294304
double pulledExtent,
295305
double refreshTriggerPullDistance,
296306
double refreshIndicatorExtent,
297307
) {
308+
pulledExtentFlare = pulledExtent * 0.6;
309+
playAuto = refreshState == IOS.RefreshIndicatorMode.refresh;
298310
return Align(
299311
alignment: Alignment.bottomCenter,
300312
child: new Container(
@@ -307,6 +319,7 @@ class _GSYPullLoadWidgetState extends State<GSYPullLoadWidget> {
307319
child: FlareActor("static/file/loading_world_now.flr",
308320
alignment: Alignment.topCenter,
309321
fit: BoxFit.cover,
322+
controller: this,
310323
animation: "Earth Moving"),
311324
),
312325
);

0 commit comments

Comments
 (0)