Blame view

lib/pages/home/widgets/ShakeImage.dart 2.79 KB
79de0824   吴启风   feat:小鹅通入口图片增加摇摆动画
1
  
f946f1ce   吴启风   feat:小鹅通入口图片定时动画
2
3
  import 'dart:async';
  
79de0824   吴启风   feat:小鹅通入口图片增加摇摆动画
4
5
6
7
8
9
10
11
12
13
14
  import 'package:flutter/cupertino.dart';
  import 'package:wow_english/common/extension/string_extension.dart';
  
  ///带左右摇晃的wow封面
  class ShakeImage extends StatefulWidget {
    const ShakeImage({super.key});
  
    @override
    _ShakeImageState createState() => _ShakeImageState();
  }
  
f946f1ce   吴启风   feat:小鹅通入口图片定时动画
15
16
  class _ShakeImageState extends State<ShakeImage> with SingleTickerProviderStateMixin,
      WidgetsBindingObserver {
79de0824   吴启风   feat:小鹅通入口图片增加摇摆动画
17
18
    late AnimationController _controller;
    late Animation<double> _animation;
f946f1ce   吴启风   feat:小鹅通入口图片定时动画
19
    late Timer _timer;
79de0824   吴启风   feat:小鹅通入口图片增加摇摆动画
20
21
22
23
  
    @override
    void initState() {
      super.initState();
f946f1ce   吴启风   feat:小鹅通入口图片定时动画
24
25
      WidgetsBinding.instance.addObserver(this);
  
79de0824   吴启风   feat:小鹅通入口图片增加摇摆动画
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
      _controller = AnimationController(
        duration: const Duration(seconds: 2),
        vsync: this,
      );
  
      _animation = TweenSequence([
        TweenSequenceItem(tween: Tween(begin: 0.0, end: 0.05).chain(CurveTween(curve: Curves.easeInOut)), weight: 1),
        TweenSequenceItem(tween: Tween(begin: 0.05, end: -0.1).chain(CurveTween(curve: Curves.easeInOut)), weight: 1),
        TweenSequenceItem(tween: Tween(begin: -0.1, end: 0.2).chain(CurveTween(curve: Curves.easeInOut)), weight: 1),
        TweenSequenceItem(tween: Tween(begin: 0.2, end: -0.2).chain(CurveTween(curve: Curves.easeInOut)), weight: 1),
        TweenSequenceItem(tween: Tween(begin: -0.2, end: 0.1).chain(CurveTween(curve: Curves.easeInOut)), weight: 1),
        TweenSequenceItem(tween: Tween(begin: 0.1, end: -0.05).chain(CurveTween(curve: Curves.easeInOut)), weight: 1),
        TweenSequenceItem(tween: Tween(begin: -0.05, end: 0.0).chain(CurveTween(curve: Curves.easeInOut)), weight: 1),
      ]).animate(_controller);
  
0e314ad5   吴启风   feat:开屏页播放背景音乐wel...
41
      Timer(const Duration(seconds: 1), () {
f946f1ce   吴启风   feat:小鹅通入口图片定时动画
42
        _controller.forward(from: 0.0);
0e314ad5   吴启风   feat:开屏页播放背景音乐wel...
43
44
45
        _timer = Timer.periodic(const Duration(seconds: 4), (Timer timer) {
          _controller.forward(from: 0.0);
        });
79de0824   吴启风   feat:小鹅通入口图片增加摇摆动画
46
47
48
49
50
51
52
53
54
55
56
57
      });
  
      // _controller.addStatusListener((status) {
      //   if (status == AnimationStatus.completed) {
      //     _controller.reverse();
      //   } else if (status == AnimationStatus.dismissed) {
      //     _controller.forward();
      //   }
      // });
    }
  
    @override
f946f1ce   吴启风   feat:小鹅通入口图片定时动画
58
59
60
61
62
63
64
65
66
    void didChangeAppLifecycleState(AppLifecycleState state) {
      if (state == AppLifecycleState.paused) {
        _controller.stop();
      } else if (state == AppLifecycleState.resumed) {
        _controller.forward();
      }
    }
  
    @override
79de0824   吴启风   feat:小鹅通入口图片增加摇摆动画
67
    void dispose() {
f946f1ce   吴启风   feat:小鹅通入口图片定时动画
68
      WidgetsBinding.instance.removeObserver(this);
79de0824   吴启风   feat:小鹅通入口图片增加摇摆动画
69
      _controller.dispose();
f946f1ce   吴启风   feat:小鹅通入口图片定时动画
70
      _timer.cancel();
79de0824   吴启风   feat:小鹅通入口图片增加摇摆动画
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
      super.dispose();
    }
  
    @override
    Widget build(BuildContext context) {
      return Center(
        child: AnimatedBuilder(
          animation: _animation,
          builder: (context, child) {
            return Transform.rotate(
              angle: _animation.value,
              child: child,
            );
          },
          child: Image.asset('xe_shop'.assetPng,
              width: 153),
        ),
      );
    }
  }