Hibok
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 
 
 

67 righe
1.6 KiB

  1. import 'package:chat/utils/MessageMgr.dart';
  2. import 'package:flutter/material.dart';
  3. import '../r.dart';
  4. class CoinAnim extends StatefulWidget {
  5. @required
  6. final animFinishCallback;
  7. CoinAnim({Key key, @required this.animFinishCallback});
  8. @override
  9. _CoinAnimState createState() => _CoinAnimState();
  10. }
  11. class _CoinAnimState extends State<CoinAnim>
  12. with SingleTickerProviderStateMixin {
  13. Animation<double> _animation;
  14. AnimationController _controller;
  15. double begin = 10;
  16. double end = 2;
  17. @override
  18. void initState() {
  19. super.initState();
  20. // 启动动画controller
  21. _controller = new AnimationController(
  22. duration: Duration(milliseconds: 500), vsync: this);
  23. _controller.addStatusListener((AnimationStatus status) {
  24. setState(() {});
  25. if (status == AnimationStatus.completed) {
  26. widget.animFinishCallback();
  27. _controller.reverse();
  28. }
  29. });
  30. _animation = new Tween<double>(begin: begin, end: end).animate(_controller)
  31. ..addListener(() {
  32. setState(() {});
  33. });
  34. _controller.forward();
  35. MessageMgr().on('addCoin', msgAddCoin);
  36. }
  37. msgAddCoin(data) {
  38. _controller.forward();
  39. }
  40. @override
  41. void dispose() {
  42. _controller.stop();
  43. _controller.dispose();
  44. MessageMgr().off('addCoin', msgAddCoin);
  45. super.dispose();
  46. }
  47. @override
  48. Widget build(BuildContext context) {
  49. return Container(
  50. margin: EdgeInsets.only(top: _animation.value),
  51. child: Opacity(
  52. opacity: 0.6,
  53. child: Container(
  54. height: 14,
  55. margin: EdgeInsets.only(left: 6),
  56. child: Image.asset(R.assetsImagesCoin))));
  57. }
  58. }