don't use Offstage as widget of animated loading, reuse refresh as

loading

Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
21pages
2023-08-18 12:52:50 +08:00
parent d56356e595
commit 24e6b54650
5 changed files with 28 additions and 102 deletions

View File

@@ -1,11 +1,17 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class AnimatedRotationWidget extends StatefulWidget {
final VoidCallback onPressed;
final ValueChanged<bool>? onHover;
final Widget child;
final RxBool? spinning;
const AnimatedRotationWidget(
{super.key, required this.onPressed, required this.child, this.onHover});
{super.key,
required this.onPressed,
required this.child,
this.spinning,
this.onHover});
@override
State<AnimatedRotationWidget> createState() => AnimatedRotationWidgetState();
@@ -14,14 +20,31 @@ class AnimatedRotationWidget extends StatefulWidget {
class AnimatedRotationWidgetState extends State<AnimatedRotationWidget> {
double turns = 0.0;
@override
void initState() {
super.initState();
widget.spinning?.listen((v) {
if (v && mounted) {
setState(() {
turns += 1;
});
}
});
}
@override
Widget build(BuildContext context) {
return AnimatedRotation(
turns: turns,
duration: const Duration(milliseconds: 200),
onEnd: () {
if (widget.spinning?.value == true && mounted) {
setState(() => turns += 1.0);
}
},
child: InkWell(
onTap: () {
setState(() => turns += 1.0);
if (mounted) setState(() => turns += 1.0);
widget.onPressed();
},
onHover: widget.onHover,