diff --git a/lib/muyu/animate_text.dart b/lib/muyu/animate_text.dart new file mode 100644 index 0000000..94d396f --- /dev/null +++ b/lib/muyu/animate_text.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; + +class AnimateText extends StatefulWidget { + final String text; + + const AnimateText({Key? key, required this.text}) : super(key: key); + + @override + State createState() => _FadTextState(); +} + +class _FadTextState extends State with SingleTickerProviderStateMixin { + late AnimationController controller; + late Animation opacity; + late Animation position; + late Animation scale; + + @override + void initState() { + super.initState(); + controller = AnimationController(vsync: this, duration: const Duration(milliseconds: 500)); + opacity = Tween(begin: 1.0, end: 0.0).animate(controller); + controller.forward(); + } + + @override + void didUpdateWidget(covariant AnimateText oldWidget) { + super.didUpdateWidget(oldWidget); + controller.forward(from: 0); + } + + @override + void dispose() { + controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return FadeTransition( + opacity: opacity, + child: Text(widget.text), + ); + } +} diff --git a/lib/muyu/muyu_page.dart b/lib/muyu/muyu_page.dart index ab5ab3f..36a1bc3 100644 --- a/lib/muyu/muyu_page.dart +++ b/lib/muyu/muyu_page.dart @@ -2,6 +2,7 @@ import 'dart:math'; import 'package:flame_audio/flame_audio.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_first_station/muyu/animate_text.dart'; import 'muyu_image.dart'; import 'count_panel.dart'; @@ -16,6 +17,8 @@ class MuyuPage extends StatefulWidget { class _MuyuPageState extends State { int _counter = 0; + int _cruValue = 2; + final Random _random = Random(); AudioPool? pool; @@ -49,9 +52,15 @@ class _MuyuPageState extends State { ), ), Expanded( - child: MuyuAssetsImage( - image: 'assets/images/muyu.png', - onTap: _onKnock, + child: Stack( + alignment: Alignment.topCenter, + children: [ + MuyuAssetsImage( + image: 'assets/images/muyu.png', + onTap: _onKnock, + ), + if (_cruValue != 0) AnimateText(text: '功德+$_cruValue') + ], ), ), ], @@ -68,8 +77,8 @@ class _MuyuPageState extends State { void _onKnock() { pool?.start(); setState(() { - int addCount = 1 + _random.nextInt(3); - _counter += addCount; + _cruValue = 1 + _random.nextInt(3); + _counter += _cruValue; }); } } diff --git a/pubspec.lock b/pubspec.lock index 98793d6..4e58d1e 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -10,7 +10,7 @@ packages: source: hosted version: "2.10.0" audioplayers: - dependency: "direct main" + dependency: transitive description: name: audioplayers sha256: "6063c05f987596ba7a3dad9bb9a5d8adfa5e7c07b9bae5301b27c11d0b3a239f"